C# 递归产生树
//递归产生树 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(); //展开整棵树 }