C# 遞歸產生樹
阿新 • • 發佈:2018-07-01
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# 遞歸產生樹