http://blog.csdn.net/zhgroup/archive/2004/10/12/133809.aspx

解决方案 »

  1.   

    这是我写的一个生成多级节点的部门树结构,你看着自己改一下吧public  System.Windows.Forms.TreeNode node( string text,int Tag)
    {
    System.Windows.Forms.TreeNode n = new  System.Windows.Forms.TreeNode();
    //节点值
    n.Text=text;
    //节点隐藏值
    n.Tag=Tag;
    return n;
    }//求部门节点,根据上级部门来决断
    private  void getTreeNode(int BmID, System.Windows.Forms.TreeNodeCollection nodes,DataTable Table)
    {
    //指定搜索条件对结果集进行查询,BmID为上级部门ID
    string seaTJ="ParentOrgUnitId="+BmID+"";
    DataRow[] foundRows;
    foundRows=Table.Select(seaTJ,"OrgUnitId"); foreach(DataRow item  in foundRows )
    {
    object[] items=item.ItemArray ;

    string item_text=items[1].ToString().Trim();
    int Tag;
    Tag=int.Parse(items[0].ToString());
    nodes.Add(node(item_text,Tag));
    }
    //重新调用getTreeNode 函数,得到下一级节点
    for(int i=0;i<foundRows.Length;i++)
    {

    this.getTreeNode(int.Parse(foundRows[i]["OrgUnitId"].ToString()),nodes[i].Nodes,Table);
    }
    }Table为你的数据集
    假设你的最上一级id为0
    执行时应为
    this.getTreeNode(0,this.treeView1.Nodes,Table);
      

  2.   

    要是赶项目的话,就试试dotNetBar和dotNetMagic:
    相当漂亮和功能丰富的控件集合。
    不过,要是自己想了解一下这方面的技术的话,dotNetBar和dotNetMagic又有源码公开,非常具有可参考的形式和结构。
    :-)
      

  3.   

    //递归的例子
    private void CreatMenuItem()
    {
    OleDbConnection myConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\Menu.mdb;Persist Security Info=False;");
    OleDbCommand myComm = new OleDbCommand("SELECT nid,name,pid FROM Items ORDER BY pid,nid",myConn);
    OleDbDataAdapter myAda = new OleDbDataAdapter(myComm); 
    DataSet ds = new DataSet();
    myAda.Fill(ds,"MenuItemINfos");
    DataRow [] drs = ds.Tables["MenuItemINfos"].Select("pid = 0");
    int index = 0;
    foreach(DataRow dr in drs)
    {
    MenuItem mi =new MenuItem((string)dr["name"]);
    this.mainMenu1.MenuItems.Add(index++,mi);
    CreatBranch(mi,(int)dr["nid"],ds);
    }
    }
    private void CreatBranch(MenuItem parmt,int pid,DataSet ds)
    {
    int index = 0;
    foreach(DataRow dr in ds.Tables["MenuItemINfos"].Select("pid = "+pid))
    {
    MenuItem mi =new MenuItem((string)dr["name"]);
    parmt.MenuItems.Add(index++,mi);
    CreatBranch(mi,(int)dr["nid"],ds);
    }
    }