程序如下:
#region //处理树节点
private TreeNode ProcessTreeNode(ECobj e, TreeNodeCollection tCol)//ECObj 是一个自定义对象
    {
          TreeNode tNode = new TreeNode();
          //装入导航树节点标题   
            tNode.Text = eci.Name;
            //记录导航树节点ID值   
            tNode.Value = eci.ID.ToString();
           try
            {
                tCol.Add(tNode);
                return tNode;
            }
            catch { return null; }
        }
        else{return null;}
    }    #endregion
    //说明:上面这过程没有问题,对正常加入节点    #region //递归增加节点
    public void AddTreeNode(long PID, TreeNode td)
    {
        ECObjS ec = new ECObjS();//ECObjS也是一个自定义对象,是集合类型
        ec.FindChildren(ClsID,1);//查找当前ClsID下的第一层子,问题就出现在这儿,当第一次查找到的子节点有两个或两个以上的时候,下面的循环永远只能对第一个节点执行递归,为什么啊.
        for (int i = 0; i < ec.Count; i++)
        {
            AddTreeNode(ec[i].ClsID, ProcessTreeNode(ec[i], td.ChildNodes));
        }

    }
    #endregion

解决方案 »

  1.   

        要把现在循环到的接点当成下一次调用自己的接点集合,在以他为根的树里继续找,然后不停的递归,一直到没有儿子了然后返回,然后可龙,就可以动态的生成一个无限深的树了,呵呵~!
      然后再考虑,如何把树存到数据库里(XML),都搞好了,就可以做个系统角色设置的功能了,呵呵~!
     
      

  2.   

     public void AddTreeNode(long PID, TreeNode td) 
        { 
            ECObjS ec = new ECObjS();//ECObjS也是一个自定义对象,是集合类型 
            ec.FindChildren(ClsID,1);//查找当前ClsID下的第一层子,问题就出现在这儿,当第一次查找到的子节点有两个或两个以上的时候,下面的循环永远只能对第一个节点执行递归,为什么啊. 
            for (int i = 0; i  < ec.Count; i++) 
            { 
                AddTreeNode(ec[i].ClsID, ProcessTreeNode(ec[i], td.ChildNodes)); 
            }     1.  添加结点到数据库
         2.重新递归
        } 
      

  3.   

      
    给你一点我做的程序,是从数据库里读出书,希望对你有帮助,读的方法很多,仅供参考啊~!
    public void CreatTreeView()
            {
                for (int i = 0; i < tv.Nodes.Count; i++)
                {
                    foreach (TreeNode st in tv.Nodes)
                    {
                        if (st.Tag.ToString() == "0")
                        {
                            tNodes.Add((TreeNode)st.Clone());
                            tv.Nodes.Remove(st);
                        }
                    }
                }
                foreach(TreeNode nodeP in tNodes)
                {
                    zhaohaizi(nodeP);
                }        }
            public void zhaohaizi(TreeNode nodeP)
            {
                   foreach (TreeNode nodeC in tv.Nodes)
                    {
                        if (nodeC.Tag.ToString().Trim() == nodeP.Name)
                        {
                            zhaohaizi(nodeC);
                            nodeP.Nodes.Add((TreeNode)nodeC.Clone());
                        }
                     }
              }
       说明下,Tag里放的父亲的ID,0表示没有父亲,先把所有接点都放到一个树里,然后从那个树里找出来。具体你继续做把,用多循环加判断也可以做,用递归会好点,而且容易读。
       我同事和我的方法不一样不过也实现里,你自己想想,方法很多,找个最优化的就好~!