1. 程式人生 > >C# 遞歸產生樹

C# 遞歸產生樹

name add ++ class ren AR exec span 父節點

   //遞歸產生樹
        private void CreateTwo(TreeNode node, int id)
        {
            #region --根據指定ID查找數據到 dt
            string strSql = "select * from Menu where MenuParent = " + id;
            DataTable dt = SqlHelper.ExecuteDatatable(strSql);
            #endregion

            if (id == 0)                                             //
id = 0 是根節點 { for (int i = 0; i < dt.Rows.Count; i++) //先查詢PID=0的 { TreeNode nd = new TreeNode(); nd.Text = dt.Rows[i]["MenuName"].ToString(); CreateTwo(nd, Convert.ToInt32(dt.Rows[i]["MenuId"].ToString())); //
把根節點ID傳過去查找PID是該id的子節點 treeView1.Nodes.Add(nd); } } else { for (int i = 0; i < dt.Rows.Count; i++) { TreeNode Tnode = new TreeNode(); Tnode.Text = dt.Rows[i]["
MenuName"].ToString(); CreateTwo(Tnode, Convert.ToInt32(dt.Rows[i]["MenuId"].ToString())); node.Nodes.Add(Tnode); } } }

非遞歸綁定3級別

        //綁定TrreView
        private void InitModuleTree(DataTable dt)
        {
            //清空treeview上所有節點
            this.treeView1.Nodes.Clear();

            //先綁定父節點
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                int Prent = Convert.ToInt16(dt.Rows[i]["MenuParent"]);//
                if (Prent == 0) //先綁定父節點
                {
                    TreeNode nodeParent = new TreeNode();
                    nodeParent.Tag = dt.Rows[i]["MenuId"];//設置一個值,為加入子節點做準備,(先這樣用,不管Tag是什麽)
                    nodeParent.Text = dt.Rows[i]["MenuName"].ToString();
                    treeView1.Nodes.Add(nodeParent);
                }
            }
            //在綁定子節點(綁定2級目錄)
            foreach (TreeNode item in treeView1.Nodes)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    var ss = dt.Rows[i]["MenuParent"]; //獲取pid
                    var s1 = item.Tag;
                    if ((int)item.Tag == (int)dt.Rows[i]["MenuParent"]) //dt該行的pid = 這個父節點ID (表示屬該行子節點)
                    {
                        TreeNode childNode = new TreeNode();
                        childNode.Tag = dt.Rows[i]["MenuId"];
                        childNode.Text = dt.Rows[i]["MenuName"].ToString();
                        item.Nodes.Add(childNode); //加入父節點中
                    };

                }
            }
            //在綁定子節點(綁定3級目錄)
            foreach (TreeNode item1 in treeView1.Nodes)
            {
                int index0 = treeView1.Nodes.IndexOf(item1); //index 為索引值
                var nodes1 = treeView1.Nodes[index0].Nodes;

                foreach (TreeNode item in nodes1)
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        var ss = dt.Rows[i]["MenuParent"]; //獲取pid
                        var s1 = item.Tag;

                        if ((int)item.Tag == (int)dt.Rows[i]["MenuParent"]) //dt該行的pid = 這個父節點ID (表示屬該行子節點)
                        {
                            TreeNode childNode = new TreeNode();
                            childNode.Tag = dt.Rows[i]["MenuId"];
                            childNode.Text = dt.Rows[i]["MenuName"].ToString();
                            item.Nodes.Add(childNode); //加入父節點中
                        };

                    }
                }
            }

            treeView1.ExpandAll();      //展開整棵樹
        }

C# 遞歸產生樹