[工作札记]02: .Net Winform控件TreeView最简递归绑定方法
前言: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工作札记系列:
[工作札记]02: .Net Winform控件TreeView最简递归绑定方法
[工作札记]02: .Net Winform控件TreeView最简递归绑定方法的更多相关文章
- WinForm控件TreeView 只部分节点显示  CheckBox
		
WinForm控件TreeView 只部分节点显示 CheckBox 用过asp.net的应该知道,要在treeview中实现上述功能可以使用ShowCheckBox 属性指定那些节点显示check ...
 - WinForm控件使用文章收藏整理完成
		
对C# WinForm开发系列收集的控件使用方面进行整理, 加入了一些文章, 不断补充充实, 完善这方面. 基础 - 常用控件 C# WinForm开发系列 - CheckBox/Button/Lab ...
 - C#中常见的winform控件命名规范
		
我们知道Button 常常简称为btn,那么Winform中的其它控件呢,这篇文章在C#的winform控件命名规范 的基础上对一些控件的名称的简称进行了整理. 1. 标准控件 NO. 控件类型简写 ...
 - C# WinForm控件、自定义控件整理(大全)
		
转:http://www.cnblogs.com/top5/archive/2010/04/29/1724039.html 对C# WinForm开发系列收集的控件使用方面进行整理, 加入了一些文章, ...
 - wpf中插入winform控件并获取句柄
		
因工作需要使用wpf做界面,而有个开发包依赖picturebox控件,上网研究了一下,总算弄通了. 首先在项目中添加引用System.Windows.Forms与WindowsFormsIntegra ...
 - WPF保存包含Winform控件的XAML页面问题
		
原文:WPF保存包含Winform控件的XAML页面问题 最近的工作中,用到了WPF调用Winform控件 但是在保存XAML页面的时候发现了问题,就是Winform页面黑黑的,没有任何渲染的波形曲线 ...
 - Wpf使用Winform控件后Wpf元素被Winform控件遮盖问题的解决
		
有人会说不建议Wpf中使用Winform控件,有人会说建议使用Winform控件在Wpf下的替代方案,然而在实际工作中由于项目的特殊需求,考虑到时间.成本等因素,往往难免会碰到在WPF中使用Winfr ...
 - 潜移默化学会WPF(难点控件treeview)--改造TreeView(CheckBox多选择版本),递归绑定数据
		
原文:潜移默化学会WPF(难点控件treeview)--改造TreeView(CheckBox多选择版本),递归绑定数据 目前自己对treeview的感慨很多 今天先讲 面对这种 表结构的数据 的其中 ...
 - 《Dotnet9》系列-开源C# Winform控件库1《HZHControls》强力推荐
		
大家好,我是Dotnet9小编,一个从事dotnet开发8年+的程序员.我最近在写dotnet分享文章,希望能让更多人看到dotnet的发展,了解更多dotnet技术,帮助dotnet程序员应用dot ...
 
随机推荐
- 深入理解Java虚拟机(八)——类加载机制
			
是什么是类加载机制 Java虚拟机将class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程就是类加载机制. 类的生命周期 一个类从加载到内存 ...
 - 三、java多线程核心技术(笔记)——线程的优先级
			
概论: 在操作系统中,线程可以划分优先级,优先级高的获得的CPU资源较多,也就是CPU优先执行优先级较高的线程.在JAVA中线程的优先级 分1~~10个10个等级.大于或者小于会报异常. 一.线程优先 ...
 - jwt 简单基本使用加密解密
			
import jwt # 加密 encode_jwt=jwt.encode({'uid':'123'},'密钥123',algorithm='HS256') print(encode_jwt) # 解 ...
 - css 08-CSS属性:定位属性
			
08-CSS属性:定位属性 CSS的定位属性有三种,分别是绝对定位.相对定位.固定定位. position: absolute; <!-- 绝对定位 --> position: relat ...
 - 图片放大缩小的zoom.js
			
1 +function ($) { "use strict"; 2 3 /** 4 * The zoom service 5 */ 6 function ZoomService ( ...
 - JS C# 正则表达式去除html字符中所有的标签(img em标签除外)
			
js去除em标签 $(this).html().replace(/<(?!em|\/em).*?>/g, '') C#去除 System.Text.RegularExpressions.R ...
 - matplotlib学习日记(四)-绘制直方统计图形
			
(一)柱状图-应用在定性数据的可视化场景或者离散型数据,条形图和柱状图相似,只不过是函数barh import matplotlib as mpl import matplotlib.pyplot a ...
 - 由innodb锁引起的数据库相关
			
innodb 锁的问题 1.事务 原子性:要么成功,要么失败 一致性:前后数据保持一致状态 隔离性:多个事务并行,相互不影响 持久性:事务提交之后,对数据的影响是永久性的,即使故障也可以保持. 2.并 ...
 - mysql存储过程定义者
			
1. 执行update mysql.proc set DEFINER='root@%' WHERE NAME='p_update_rim_batch_log' AND db='otherdataonl ...
 - [leetcode]64Minimum Path Sum 动态规划
			
/** * Given a m x n grid filled with non-negative numbers, * find a path from top left to bottom rig ...