有三个表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();
}

解决方案 »

  1.   

    if (s.Contains(lt.Value)) 
    问题出在这
    如:
    s=12,13,46
    会绑定1,2,3,12,13,4,6,46
      

  2.   

    foreach (ListItem lt in CheckBoxList1.Items) 
            { 
                if (s.Contains(lt.Value)) 
                { 
                    lt.Selected = true; 
                } 
            } 
    把这段代码 改写一下
      

  3.   

    foreach (ListItem lt in CheckBoxList1.Items)  
            {  
                if (s.Contains(lt.Value))  
                {  
                    lt.Selected = true;  
                }  
                 else 
                    lt.Selected = falsh;
            }  
      

  4.   


    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; 
                } 
            } 
        } 
      

  5.   

    还有个问题就是
    像1楼说的那样
    if (s.Contains(lt.Value))  
    问题出在这 
    如: 
    s=12,13,46 
    会绑定1,2,3,12,13,4,6,46 
    这要怎么解决
      

  6.   

    if (s.Contains(lt.Value))  不能这么做把s=12,13,46 测试Array arr = s.Split(',');
    foreach (string _arr in arr ) 
    {
       int i=Convert.ToInt32(_arr);
       CheckBoxList1.Items[i]=true;
    }
      

  7.   

    CheckBoxList1.Items[i].Selected=true;
      

  8.   


    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);
                   }                   
                 }
             } 
        }
      

  9.   

    解决啦
    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;
            }
      

  10.   

    怎么让checklist每次单击后所有选项全部为假
    CheckBoxList1.Items.FindByValue(_arr).Selected=false
    这个不好使
      

  11.   

    怎么让checklist每次单击后CheckBoxList1所有选项全部为假 
    CheckBoxList1.Items.FindByValue(_arr).Selected=false 
    这个不好使
      

  12.   

    1 对于动态改变壮态或动态生成的CheckBoxList,须手工处理;
    2 在ListBox的SelectedIndexChanged事件中写代码即可,它的AutoPostBack=true;
    3 根据选项,每次都先清空复选项框的选中壮态,再改变对应项的壮态[也可设其Enabled=false];
      

  13.   


    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(); 
    }
      

  14.   

     to 15楼     /**//// <summary>
            /// 取消所有的被选中的选项
            /// </summary>
            /// <param name="clbName">CheckListBox控件名</param>
            public void UncheckedAllItem(CheckedListBox clbName)
            ...{
                for (int i = 0; i < clbName.Items.Count; i++)
                ...{
                    clbName.SetItemChecked(i, false);
                }
            }