无论是webform还是winform,TreeView都是常用功能。使用递归方法很方便。

下面分享一个小实例。

数据库中3个字段,分别是:ID,itemType_name,itemType_PID

  1. private void itemType_Load(object sender, EventArgs e)
  2. {
  3. dataBind();
  4. }
  5.  
  6. private void dataBind()
  7. {
  8.  
  9. //获取数据
  10. string sql = "select * from itemType order by itemType_paixu";
  11.  
  12. DB db = new DB();
  13. string _msg = "";
  14. DataTable DT = db.GetDt(sql, out _msg);
  15. //
  16.  
  17. treeView1.Nodes.Clear();
  18.  
  19. //添加顶节点
  20. TreeNode tempNode = new TreeNode();
  21. tempNode.Text = "商品类别";
  22. tempNode.Name = "0";
  23. treeView1.Nodes.Add(tempNode);
  24. //
  25.  
  26. nodeBind(treeView1, DT, "0", tempNode);
  27. treeView1.ExpandAll();
  28. //
  29. }
  30.  
  31. public void nodeBind(TreeView _treeView, DataTable _dt, string _filter, TreeNode _pNode)
  32. {
  33.  
  34. //循环构建树
  35. string sFilter = "itemType_PID=" + _filter;
  36. TreeNode parentNode = _pNode;
  37.  
  38. DataView dv = new DataView(_dt);
  39.  
  40. dv.RowFilter = sFilter;
  41. if (dv.Count > 0)
  42. {
  43. foreach (DataRowView drv in dv)
  44. {
  45. TreeNode tempNode = new TreeNode();
  46.  
  47. tempNode.Text = drv["itemType_name"].ToString();
  48. tempNode.Name = drv["ID"].ToString();
  49.  
  50. if (parentNode != null)
  51. parentNode.Nodes.Add(tempNode);
  52. else
  53. _treeView.Nodes.Add(tempNode);
  54.  
  55. nodeBind(_treeView, _dt, drv["ID"].ToString(), tempNode);
  56. }
  57. }
  58. }

  上面这个例子是有固定根节点的,下面这个例子是没有根节点的,递归构建更方便。

  1. private void codeitem_Load(object sender, EventArgs e)
  2. {
  3. dataBind();
  4. }
  5.  
  6. private void dataBind()
  7. {
  8.  
  9. //获取数据
  10. string sql = "select * from codeitem order by codeitem_paixu";
  11.  
  12. DB db = new DB();
  13. string _msg = "";
  14. DataTable DT = db.GetDt(sql, out _msg);
  15. //
  16.  
  17. treeView1.Nodes.Clear();
  18. nodeBind(treeView1, DT, "0", null);
  19. treeView1.ExpandAll();
  20. //
  21. }
  22.  
  23. public void nodeBind(TreeView _treeView, DataTable _dt, string _filter, TreeNode _pNode)
  24. {
  25.  
  26. //循环构建树
  27. string sFilter = "codeitem_pcode=’" + _filter + "’";
  28. TreeNode parentNode = _pNode;
  29.  
  30. DataView dv = new DataView(_dt);
  31.  
  32. dv.RowFilter = sFilter;
  33. if (dv.Count > 0)
  34. {
  35. foreach (DataRowView drv in dv)
  36. {
  37. TreeNode tempNode = new TreeNode();
  38.  
  39. tempNode.Text = drv["codeitem_name"].ToString();
  40. tempNode.Name = drv["ID"].ToString();
  41.  
  42. if (parentNode != null)
  43. parentNode.Nodes.Add(tempNode);
  44. else
  45. _treeView.Nodes.Add(tempNode);
  46.  
  47. nodeBind(_treeView, _dt, drv["codeitem_code"].ToString(), tempNode);
  48. }
  49. }
  50. }

  bubuko.com版权所有,禁止转载。原地址:【winform,TreeView树,树形菜单,bubufx】

winform中生成TreeView树的更多相关文章

  1. Winform中生成自动控件

    场景: 前几天项目需要模拟数据,但是实际设备还没有接上,就自己用Winform搭建了一个数据模拟器,生成数据给平台.这里又一个需求,就是从数据库中找出设备,然后自动生成控件,勾选就表示开启该设备,能上 ...

  2. winform中的TreeView的数据绑定

    #region 绑定TreeView /// <summary> /// 绑定TreeView(利用TreeNode) /// </summary> /// <param ...

  3. VS 的winform中生成release模式

    我试过,直接在项目的"Properties"中,修改"Build"标签的"Configuration"还不行.因为之前将不常用的工具栏隐藏了 ...

  4. Winform中的Treeview动态绑定数据库

    http://bbs.csdn.net/topics/370139193 SQL code   ? 1 2 3 4 5 6 CREATE TABLE [dbo].[Company] (     [Id ...

  5. WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色

    本文转载:http://www.cnblogs.com/umplatform/archive/2012/08/29/2660240.html 在B/S开发中,对TreeView控件要改变当前选中节点的 ...

  6. WinForm控件TreeView 只部分节点显示 CheckBox

    WinForm控件TreeView 只部分节点显示  CheckBox 用过asp.net的应该知道,要在treeview中实现上述功能可以使用ShowCheckBox 属性指定那些节点显示check ...

  7. C#winform菜单权限分配,与菜单同步的treeView树状菜单权限控制使用心得

    在网上查了很多,发现没有讲述关于--C#winform菜单权限分配,与菜单同步的treeView树状菜单权限控制使用--的资料 自己研究了一个使用方法.下面来看看. 我有两个窗体:LOGINFRM,M ...

  8. MVC树控件,mvc中应用treeview,实现复选框树的多层级表单控件

    类似于多层级的角色与权限控制功能,用MVC实现MVC树控件,mvc中应用treeview,实现复选框树的多层级表单控件.最近我们的项目中需要用到树型菜单,以前使用WebForm时,树型菜单有微软提供的 ...

  9. Winform中Treeview控件失去焦点,将选择的节点设置为高亮显示 (2012-07-16 13:47:07)转载▼

    Winform中Treeview控件失去焦点,将选择的节点设置为高亮显示 (2012-07-16 13:47:07)转载▼标签: winform treeview drawnode Treeview控 ...

随机推荐

  1. 搭建java web开发环境、使用eclipse编写第一个java web程序

    开发工具:eclipse-jee-juno-SR2-win32-x86_64(请自行官网下载) 使用服务器:apache-tomcat-7.0.35-windows-x64(请自行官网下载) 打开 e ...

  2. 使用Github Pages建独立博客

    http://beiyuu.com/github-pages/ Github很好的将代码和社区联系在了一起,于是发生了很多有趣的事情,世界也因为他美好了一点点.Github作为现在最流行的代码仓库,已 ...

  3. windows10和ubuntu16.04双系统下时间不对的问题 ZT

    最近装了windows10和ubuntu16.04双系统,仍然出现了喜闻乐见的老问题,装完后,在windows下时区不对,之前的老办法是: sudo gedit /etc/default/rcS ut ...

  4. BZOJ 1584 DP

    显然序列不能超过sqrt(n),因为最差情况是每个都独立答案为n #include <iostream> #include <cstring> #include <cst ...

  5. 最适合和最不适合新手使用的几款 Linux 发行版

    大多数知名的Linux发行版都属于"比较容易使用"这一类.一些观察人士可能会驳斥这个观点,但事实上,说到Linux,大多数并非从事IT或软件开发工作的人会被最容易的使用体验所吸引. ...

  6. MVC+UnitOfWork+Repository+EF 之我见

    UnitOfWork+Repository模式简介: 每次提交数据库都会打开一个连接,造成结果是:多个连接无法共用一个数据库级别的事务,也就无法保证数据的原子性.一致性.解决办法是:在Reposito ...

  7. 上下文管理、线程池、redis订阅和发布

    一:上下文管理: 对于一些对象在使用之后,需要关闭操作的.比如说:socket.mysql数据库连接.文件句柄等. 都可以用上下文来管理. 语法结构: Typical usage: @contextm ...

  8. Twitter API 申请key

    最近听了一下coursera的python课(https://www.coursera.org/learn/python-network-data/home/welcome),讲的挺简单也挺有意思.其 ...

  9. ubuntu随笔

    在命令行里输入 sudo nautilus 之后输入你的用户的密码,会弹出一个目录窗口来,可以复制到这来

  10. Lae程序员小漫画(二),仅供一乐

    Lae软件开发,快乐程序员!