有三个表tre,rol,pag
tre
tid path
r1 2,3,4,5
r2 1,2,3,4,5,6
r3 4,5,6
r4 5,6
r5 1rol
rid rname
r1 jca
r2 jcb
r3 admin
r4 people
r5 operpag
pid pname
1 添加人员
2 添加管理员
3 管理人员
4 管理管理员
5 删除人员
6 删除管理员ListBox绑定rol表
显示rol表的rname
CheckBoxList绑定pag表
显示pag表的pname我想要的效果是选ListBox一项
比如单击jca后
CheckBoxList根据tre和pag表的path列与pid列关联
2添加管理员3管理人员4管理管理员5删除人员是选中的
剩下的是没选中
然后单击ListBox其他的数据也是同样的效果我说的明白么
各位大哥谢谢啦
---------------------------------------------------------------
这是我写的单击事件
可是数据却对不上
protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbcmd = db.GetSqlStringCommand("select path from tre where tid='"+ListBox1.SelectedValue+"'");
string s = db.ExecuteScalar(dbcmd).ToString();
foreach (ListItem lt in CheckBoxList1.Items)
{
if (s.Contains(lt.Value))
{
lt.Selected = true;
}
}
}
-----------------------------------------------------
这是ListBox与CheckBoxList绑定数据的代码
private void PageSet()
{
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbcmd = db.GetSqlStringCommand("select RNAME,rid from rol");
DataTable dtroles = db.ExecuteDataSet(dbcmd).Tables[0];
ListBox1.DataTextField = "rname";
ListBox1.DataValueField = "rid";
ListBox1.DataSource = dtroles;
ListBox1.DataBind();
dbcmd = db.GetSqlStringCommand("select pid,pname from pag");
DataTable dt = db.ExecuteDataSet(dbcmd).Tables[0];
CheckBoxList1.DataTextField = "pname";
CheckBoxList1.DataValueField = "pid";
CheckBoxList1.DataSource = dt;
CheckBoxList1.DataBind();
}
tre
tid path
r1 2,3,4,5
r2 1,2,3,4,5,6
r3 4,5,6
r4 5,6
r5 1rol
rid rname
r1 jca
r2 jcb
r3 admin
r4 people
r5 operpag
pid pname
1 添加人员
2 添加管理员
3 管理人员
4 管理管理员
5 删除人员
6 删除管理员ListBox绑定rol表
显示rol表的rname
CheckBoxList绑定pag表
显示pag表的pname我想要的效果是选ListBox一项
比如单击jca后
CheckBoxList根据tre和pag表的path列与pid列关联
2添加管理员3管理人员4管理管理员5删除人员是选中的
剩下的是没选中
然后单击ListBox其他的数据也是同样的效果我说的明白么
各位大哥谢谢啦
---------------------------------------------------------------
这是我写的单击事件
可是数据却对不上
protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbcmd = db.GetSqlStringCommand("select path from tre where tid='"+ListBox1.SelectedValue+"'");
string s = db.ExecuteScalar(dbcmd).ToString();
foreach (ListItem lt in CheckBoxList1.Items)
{
if (s.Contains(lt.Value))
{
lt.Selected = true;
}
}
}
-----------------------------------------------------
这是ListBox与CheckBoxList绑定数据的代码
private void PageSet()
{
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbcmd = db.GetSqlStringCommand("select RNAME,rid from rol");
DataTable dtroles = db.ExecuteDataSet(dbcmd).Tables[0];
ListBox1.DataTextField = "rname";
ListBox1.DataValueField = "rid";
ListBox1.DataSource = dtroles;
ListBox1.DataBind();
dbcmd = db.GetSqlStringCommand("select pid,pname from pag");
DataTable dt = db.ExecuteDataSet(dbcmd).Tables[0];
CheckBoxList1.DataTextField = "pname";
CheckBoxList1.DataValueField = "pid";
CheckBoxList1.DataSource = dt;
CheckBoxList1.DataBind();
}
问题出在这
如:
s=12,13,46
会绑定1,2,3,12,13,4,6,46
{
if (s.Contains(lt.Value))
{
lt.Selected = true;
}
}
把这段代码 改写一下
{
if (s.Contains(lt.Value))
{
lt.Selected = true;
}
else
lt.Selected = falsh;
}
protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbcmd = db.GetSqlStringCommand("select path from tre where tid='"+ListBox1.SelectedValue+"'");
string s = db.ExecuteScalar(dbcmd).ToString();
//先全部设为未选中
foreach (ListItem lt in CheckBoxList1.Items)
{
lt.Selected = false;
}
//在将符合条件的选中
foreach (ListItem lt in CheckBoxList1.Items)
{
if (s.Contains(lt.Value))
{
lt.Selected = true;
}
}
}
像1楼说的那样
if (s.Contains(lt.Value))
问题出在这
如:
s=12,13,46
会绑定1,2,3,12,13,4,6,46
这要怎么解决
foreach (string _arr in arr )
{
int i=Convert.ToInt32(_arr);
CheckBoxList1.Items[i]=true;
}
protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbcmd = db.GetSqlStringCommand("select path from tre where tid='"+ListBox1.SelectedValue+"'");
string s = db.ExecuteScalar(dbcmd).ToString();
//先全部设为未选中
foreach (ListItem lt in CheckBoxList1.Items)
{
lt.Selected = false;
}
//在将符合条件的选中
ArrayList al = new ArrayList(s.Split(','));
foreach (ListItem lt in CheckBoxList1.Items)
{
for (int i = 0; i < al.Count; i++)
{
if (lt.Value==al[i])
{
lt.Selected = true;
al.RemoveAt(i);
}
}
}
}
Array arr = db.ExecuteScalar(dbcmd).ToString().Split(',');
foreach (string _arr in arr)
{
CheckBoxList1.Items.FindByValue(_arr).Selected = false;
if(CheckBoxList1.Items.Contains(CheckBoxList1.Items.FindByValue(_arr)))
CheckBoxList1.Items.FindByValue(_arr).Selected = true;
}
CheckBoxList1.Items.FindByValue(_arr).Selected=false
这个不好使
CheckBoxList1.Items.FindByValue(_arr).Selected=false
这个不好使
2 在ListBox的SelectedIndexChanged事件中写代码即可,它的AutoPostBack=true;
3 根据选项,每次都先清空复选项框的选中壮态,再改变对应项的壮态[也可设其Enabled=false];
protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbcmd = db.GetSqlStringCommand("select path from tre where tid='"+ListBox1.SelectedValue+"'");
string s = db.ExecuteScalar(dbcmd).ToString();
string split[] = s.Split(",".ToCharArray());
for(int i=0; i<split.Length; i++)
{
foreach (ListItem lt in CheckBoxList1.Items)
{
if (split[i].ToString().Equals(lt.Value))
{
lt.Selected = true;
}
else
{
lt.Selected = false;
}
}
}
} private void PageSet()
{
Database db = DatabaseFactory.CreateDatabase();
DbCommand dbcmd = db.GetSqlStringCommand("select RNAME,rid from rol");
DataTable dtroles = db.ExecuteDataSet(dbcmd).Tables[0];
ListBox1.DataTextField = "rname";
ListBox1.DataValueField = "rid";
ListBox1.DataSource = dtroles;
ListBox1.DataBind();
dbcmd = db.GetSqlStringCommand("select pid,pname from pag");
DataTable dt = db.ExecuteDataSet(dbcmd).Tables[0];
CheckBoxList1.DataTextField = "pname";
CheckBoxList1.DataValueField = "pid";
CheckBoxList1.DataSource = dt;
CheckBoxList1.DataBind();
}
/// 取消所有的被选中的选项
/// </summary>
/// <param name="clbName">CheckListBox控件名</param>
public void UncheckedAllItem(CheckedListBox clbName)
...{
for (int i = 0; i < clbName.Items.Count; i++)
...{
clbName.SetItemChecked(i, false);
}
}