递归方法填充树型目录(treeview)

      

 

这个递归方法昨天想了一天也没明白,找不到递归的出口,我这郁闷。

请教了同事后再明白。现在写下来备忘!

原来递归方法中的循环结束了,递归就出来了。我感觉还有更好的方法,不过没时间想了。

---------------------------------------------------------------------------------------------

 

       private void FromLoad()
        {
            this.trvTask.Nodes.Clear();
     //构造根节点 
            TreeNode rootNode = new TreeNode();
            rootNode.Text = info.ProjectName;
            rootNode.Tag = "null";
           
            DataTable dt = *** ;  //数据源
            if (dt == null)
                return;
     //调用递归方法为 rootNode 添加子节点
            this.InitTree(rootNode, dt, "null");
            this.tree.Nodes.Add(rootNode);
            this.tree.Nodes[0].ExpandAll();
        }
        /// <summary>
        /// 递归构造树节点
        /// </summary>
        /// <param name="rootnode">根节点</param>
        /// <param name="table">数据源</param>
        /// <param name="parentid">父节点编号</param>
        public void InitTree(TreeNode rootnode,DataTable table,string parentid)
        {
            if (table == null || table.Rows.Count == 0) return;
            int count = table.Rows.Count;
            DataRow row = null;
            TreeNode newNode = null;
            for (int i = 0; i < count; i++)
            {
                row = table.Rows[i];
                if (parentid != Utilities.sigleton.GetObject(row["PARENTID"])) continue;

                newNode = new TreeNode();
                newNode.Text = Utilities.sigleton.GetObject(row["PJTASKNAME"]);
                newNode.Tag = Utilities.sigleton.GetObject(row["TABLEID"]);
                string id = Utilities.sigleton.GetObject(row["TABLEID"]);
                if (Utilities.sigleton.GetObject(row["associateCount"]) != "0")
                    newNode.Checked = true;

                rootnode.Nodes.Add(newNode);
                InitTree(newNode, table, id);
            }
         }

 

 

posted @ 2008-11-20 16:14  草青工作室  阅读(236)  评论(0编辑  收藏  举报