分享

C# TreeView从数据库绑定数据

 春夜喜雨LBR 2018-01-28

封装成一个函数,方便直接调用

  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. }  


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多