winfrom控件Treeview绑定数据库中的资料(节点控件)
转载:https://blog.csdn.net/tingzhiyi/article/details/77196188
封装成一个函数,直接调用
1 //绑定TrreView 2 private void InitModuleTree(DataTable dt) 3 { 4 //清空treeview上所有节点 5 this.tree_Role.Nodes.Clear(); 6 int[] gen = new int[dt.Rows.Count]; //用于存储父节点Tag 7 int[] zi = new int[dt.Rows.Count]; //用于存储子节点Tag 8 for (int i = 0; i < gen.Length; i++) 9 { 10 string zhi=dt.Rows[i][3].ToString();//获取节点Tag值 eg:1-2 11 if (zhi.Length>1) //表示是子节点 eg:1-2 12 { 13 gen[i] = int.Parse(zhi.Substring(0, zhi.IndexOf('-'))); 14 zi[i] = int.Parse(zhi.Substring(zhi.IndexOf('-') + 1)); 15 } 16 else //表示是根节点 eg:2 17 { 18 //将所有父节点加到treeview上 19 zi[i] =int.Parse(zhi); 20 TreeNode nodeParent = new TreeNode(); 21 nodeParent.Tag = (zi[i]).ToString(); 22 nodeParent.Text = dt.Rows[i][1].ToString(); 23 tree_Role.Nodes.Add(nodeParent); 24 } 25 } 26 bindChildNote(dt,gen,zi); 27 }
1 //绑定子节点 2 private void bindChildNote(DataTable dt, int[] gen, int[] zi) 3 { 4 for (int i = 0; i < gen.Length; i++) 5 { 6 if (gen[i] != 0 && zi[i] != 0) //便利所有节点,找到所有子节点 7 { 8 TreeNode childNode = new TreeNode(); 9 foreach (TreeNode item in tree_Role.Nodes) //便历treeview上所有父节点 10 { 11 if (item.Tag.ToString() == gen[i].ToString()) //找到当前子节点的父节点 12 { 13 childNode.Tag = zi[i].ToString(); 14 childNode.Text = dt.Rows[i][1].ToString(); 15 item.Nodes.Add(childNode); 16 } 17 } 18 } 19 } 20 tree_Role.ExpandAll(); //展开整棵树 21 }
效果:
引用代码:
1 namespace TreeeeeeeeeeeView 2 { 3 public partial class Treeeeeeeeeee : Form 4 { 5 public Treeeeeeeeeee() 6 { 7 InitializeComponent(); 8 9 //从数据库获取数据,得到结果为DataTable 10 SystemManager.Dao.RolePower dao = new SystemManager.Dao.RolePower(); 11 DataSet ds = CommonLib.Dao.CompressUtil.DeCompress(dao.getSystemModule()); 12 DataTable dt = ds.Tables[0]; 13 InitModuleTree(dt); 14 } 15 16 //绑定TrreView 17 private void InitModuleTree(DataTable dt) 18 { 19 //清空treeview上所有节点 20 this.tree_Role.Nodes.Clear(); 21 int[] gen = new int[dt.Rows.Count]; //用于存储父节点Tag 22 int[] zi = new int[dt.Rows.Count]; //用于存储子节点Tag 23 for (int i = 0; i < gen.Length; i++) 24 { 25 string zhi=dt.Rows[i][3].ToString();//获取节点Tag值 eg:1-2 26 if (zhi.Length>1) //表示是子节点 eg:1-2 27 { 28 gen[i] = int.Parse(zhi.Substring(0, zhi.IndexOf('-'))); 29 zi[i] = int.Parse(zhi.Substring(zhi.IndexOf('-') + 1)); 30 } 31 else //表示是根节点 eg:2 32 { 33 //将所有父节点加到treeview上 34 zi[i] =int.Parse(zhi); 35 TreeNode nodeParent = new TreeNode(); 36 nodeParent.Tag = (zi[i]).ToString(); 37 nodeParent.Text = dt.Rows[i][1].ToString(); 38 tree_Role.Nodes.Add(nodeParent); 39 } 40 } 41 bindChildNote(dt,gen,zi); 42 } 43 44 //绑定子节点 45 private void bindChildNote(DataTable dt, int[] gen, int[] zi) 46 { 47 for (int i = 0; i < gen.Length; i++) 48 { 49 if (gen[i] != 0 && zi[i] != 0) //便利所有节点,找到所有子节点 50 { 51 TreeNode childNode = new TreeNode(); 52 foreach (TreeNode item in tree_Role.Nodes) //便历treeview上所有父节点 53 { 54 if (item.Tag.ToString() == gen[i].ToString()) //找到当前子节点的父节点 55 { 56 childNode.Tag = zi[i].ToString(); 57 childNode.Text = dt.Rows[i][1].ToString(); 58 item.Nodes.Add(childNode); 59 } 60 } 61 } 62 } 63 tree_Role.ExpandAll(); //展开整棵树 64 } 65 66 } 67 }