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 }

 

posted @ 2020-11-12 22:07  猎人7号  阅读(199)  评论(0编辑  收藏  举报