前言:Treeview控件是我们在WinForm、WebForm开发中经常使用的控件,需要从数据库动态加载数据,然后递归绑定每一个节点;同样,递归的思路在其他程序中也经常运用,包括.Net MVC等。

通过网上查找,绑定TreeView控件的方法非常多,我经过自己思考并且结合工作经验,总结了一个最简单的绑定方法,供大家参考。

效果图:

数据库表:

代码

VB.net:

 1     Private Sub BindTreeView()
2 TreeView1.Nodes.AddRange(GetChildNodes(dt, 0))
3 End Sub
4
5 Private Function GetChildNodes(dt As DataTable, pId As Integer) As TreeNode()
6 Dim nodes As New List(Of TreeNode)
7 Dim rows = dt.AsEnumerable().Where(Function(s) CInt(s("pId")) = pId)
8 For Each row In rows
9 Dim node As New TreeNode()
10 node.Text = row("Name")
11 node.Tag = row("id")
12 node.Nodes.AddRange(GetChildNodes(dt, CInt(row("id"))))
13 nodes.Add(node)
14 Next
15 Return nodes.ToArray()
16 End Function

C#:

 1         private void BindTreeView()
2 {
3 treeView1.Nodes.AddRange(GetChildNodes(dt, 0));
4 }
5
6 private TreeNode[] GetChildNodes(DataTable dt, int pId)
7 {
8 var nodes = new List<TreeNode>();
9 var rows = dt.AsEnumerable().Where(s => Convert.ToInt32(s["pId"]) == pId);
10 foreach(var row in rows)
11 {
12 var node = new TreeNode();
13 node.Text = row["Name"].ToString();
14 node.Tag = row["Tag"].ToString();
15 node.Nodes.AddRange(GetChildNodes(dt, Convert.ToInt32(row["Tag"])));
16 nodes.Add(node);
17 }
18 return nodes.ToArray();
19 }

.net工作札记系列:

[工作札记]01: CS系统中分页控件的制作

[工作札记]02: .Net Winform控件TreeView最简递归绑定方法

最新文章

  1. python常用模块json、os、sys
  2. Angularjs学习笔记9_JSON和JSONP
  3. Activity类生命周期
  4. 【Android】用HandlerThread模拟AsyncTask功能(ThreadTask)
  5. codevs 1227 方格取数 2
  6. 将xml文件作为一个小的数据库,进行学生的增删改查
  7. if else 语句练习
  8. 第九十六题(编写strcpy 函数)
  9. Android编译错误——undefined reference to
  10. oracle误删除数据的恢复方法
  11. UIActivityIndicatorView的详细使用(加载菊花)
  12. HAOI 2012 高速公路
  13. 反射demo(拷贝一个对象)
  14. JPA环境配置
  15. 19.1-uC/OS-III内存管理应用
  16. [转帖]IIS内虚拟站点配置信息说明
  17. 笔记 : Ubuntu部署LNMP环境
  18. /*使用PHP创建一个数组,保存5個员工的信息(ename/sex/salary/birthday/pic)*/
  19. 随机模拟(MCMC)
  20. java环境的配置与安装(windows、macos、linux)

热门文章

  1. 惊天秘密!如何在 Flutter 项目中实现操作引导
  2. 调用windows系统下的cmd命令窗口处理文件
  3. hive实例的使用
  4. Java中四舍五入
  5. IDM(Internet Download Manager)—下载各类安装包(github代码、python包)、软件、视频、文档的神器,居家必备良药
  6. 十、TestNG分组测试
  7. gnuplot中的一些技巧
  8. react第十三单元(react路由-react路由的跳转以及路由信息) #课程目标
  9. python初学者-使用for循环用四位数组成不同的数
  10. 返回前端页面的属性名称和实体类的名称不一致用@JsonProperty