我的想法是tabel1绑定到treeview,单击节点的时候再根据typeid在table2中加入相应的项,动态的加子节点

解决方案 »

  1.   

    思路
    1、取出第一个表数据,
     遍历整个个表,每条记录在根节点下对应建一个节点
    (在每个节点下建一个空节点,目的就是节点前有“+”,可以展开)
    2、AfterCollapse事件中,先删除此节点下所有节点,
     然后根据typeid到第二个表中取出对应数据,
     遍历整个个表,每条记录在点击的节点下对应建一个节点。
      

  2.   

    public void InitTree(TreeNodeCollection Nds,string parentId,DataSet ds)
    {   //从根节点开始递归调用显示子树 
    dv=new DataView();
    TreeNode tmpNd;
    string intId;
    dv.Table=ds.Tables["department"];
    dv.RowFilter="ParentId="  + parentId ;
    foreach(DataRowView drv in dv)
    {   //递归算法从这里开始,主要思想是深度遍历。
    tmpNd=new TreeNode();
    tmpNd.Tag =drv["DepID"].ToString();
    tmpNd.Text=drv["Name"].ToString();
    Nds.Add(tmpNd);
    intId=drv["ParentId"].ToString();
    InitTree(tmpNd.Nodes,tmpNd.Tag.ToString(),ds);
    }
    }
    public void AddNode(string DepID,string txt,TreeNode SelNode)
    {
    TreeNode NewNode = new TreeNode();
    NewNode.Text = txt;
    NewNode.Tag = DepID;
    SelNode.Nodes.Add(NewNode);
    }
    public void GetAllNodeText(TreeNodeCollection tnc,string txt)
    {   //遍历树,得到树上每个节点的text
    foreach (TreeNode node in tnc)
    {
    if( node.Nodes.Count != 0 )
    GetAllNodeText(node.Nodes,txt);
    }
    }
      

  3.   

    忘了说一句:
    表结构:
    ID        ParentID     Name
    100001    0            a
    100002    0            b
    100003    100001       c
    100004    100001       d
    100005    100002       e
    依次类推
      

  4.   

    用两个循环:
    外:读取主表的纪录,将其加到treeView的根节点下。
    内:在读取主表记录时,根据子表的外健读取子表纪录(有记录就读取,没有纪录则跳到外循环的下一个),并将其加到此级节点下。
      

  5.   

    http://expert.csdn.net/Expert/topic/1994/1994918.xml?temp=7.259768E-02
      

  6.   

    建立一个视图,将两个表UNION起来,一棵树要有recordid,text,fatherid,这三个字段即可以形成级联关系.用递归调用完成添加子节点.这样的代码就不用说了吧.到处都是了.