如题,我想用一个带checkbox的树型列表显示部门人员信息,数据是从数据库查询出来。请教高手应该怎么实现,然后怎么将人员ID绑定到checkbox上,绑定后又怎么获取用户选取的人员ID。请高手帮帮忙。急!!!!!!麻烦说详细点,谢谢。

解决方案 »

  1.   

    先在SQL查询出树状结构,然后绑定checkbox
    --测试数据
    DECLARE @t TABLE(ID char(3),PID char(3),Name nvarchar(10))
    INSERT @t SELECT '001',NULL ,'山东省'
    UNION ALL SELECT '002','001','烟台市'
    UNION ALL SELECT '004','002','招远市'
    UNION ALL SELECT '003','001','青岛市'
    UNION ALL SELECT '005',NULL ,'四会市'
    UNION ALL SELECT '006','005','清远市'
    UNION ALL SELECT '007','006','小分市'--深度排序显示处理
    --生成每个节点的编码累计(相同当单编号法的编码)
    DECLARE @t_Level TABLE(ID char(3),Level int,Sort varchar(8000))
    DECLARE @Level int
    SET @Level=0
    INSERT @t_Level SELECT ID,@Level,ID
    FROM @t
    WHERE PID IS NULL
    WHILE @@ROWCOUNT>0
    BEGIN
        SET @Level=@Level+1
        INSERT @t_Level SELECT a.ID,@Level,b.Sort+a.ID
        FROM @t a,@t_Level b
        WHERE a.PID=b.ID
            AND b.Level=@Level-1
    END--显示结果
    SELECT SPACE(b.Level*2)+'|--'+a.Name
    FROM @t a,@t_Level b
    WHERE a.ID=b.ID
    ORDER BY b.Sort
    /*--结果
    |--山东省
      |--烟台市
        |--招远市
      |--青岛市
    |--四会市
      |--清远市
        |--小分市
    --*/然后用递归绑定,下面是个绑定dropdownlist的例子,你参考一下
    public void BuildDropDownList(DropDownList ddl, int pareId, DataTable dt,int vrank)
       {
        foreach (DataRow dr in dt.Rows)
        {
         if (Convert.ToInt32(dr["UpGroupID"]) == pareId)
         {
          
          ListItem li = new ListItem();      string frontStr = "";      if (Convert.ToInt32(dr["Rank"]) != vrank)
          {
           for (int i =vrank ; i < Convert.ToInt32(dr["Rank"]); i++)
           {
            frontStr += " ";
           }
           frontStr += "└";
          }      li.Text = frontStr + dr["name"].ToString();
          li.Value = dr["groupid"].ToString();      ddl.Items.Add(li);      BuildDropDownList(ddl, Convert.ToInt32(dr["groupid"]), dt,vrank);
         }
        }
       }
      

  2.   

    看看这个
    http://aspnetajax.componentart.com/control-specific/treeview/features/node_checkboxes/WebForm1.aspx
    自己找下源码,方便的
      

  3.   

    www.51aspx.com里面源码多的是···
      

  4.   

    晕写个伪代码给你啊
    protected DataSet 获得第一级菜单需要的数据集
    {
    }
    protected DataSet 获得第二级菜单需要的数据集(传父id)
    {
    }protected Void BindTree()
    {
        foreach(DataRow dr in 第一级数据集)
        {
             TreeNode tn = new TreeNode();
             tn.Text= 第一个数据集的文本;//可以看做该节点的文本
              tn.Value=第一个数据集的值;//可以看做该节点的值
              树控件.Nodes.Add(tn);//这里就给第一级菜单赋好了值
              //接下来就是给这个节点赋下一级节点的值
              foreach(DataRow dr1 in 第二个数据集)
             {
                 同上
                   //懒得写了,希望你可以看懂
             }    }    
    }
      

  5.   

    绑定好后就可以判断最后一级节点上的checkbox是否被选中然后拿到对应节点的值和文本