《转》---使用递归方法DataTable 绑定 TreeView
转自:http://blog.sina.com.cn/s/blog_8944756d01016yaj.html
前台:
<asp:View ID="view0" runat="server">
<asp:TreeView ID="treeLanMu" runat="server" ImageSet="Arrows"
onselectednodechanged="treeLanMu_SelectedNodeChanged" >
</asp:TreeView>
</asp:View>
后台:
/// <summary>
/// 递归绑定子节点
/// </summary>
/// <param name="dt">作为数据源的DataTable</param>
/// <param name="tnc">该节点的子节点集合</param>
/// <param name="pid_val">该节点的父节点值</param>
/// <param name="id_Name">DataTable中id字段的名称</param>
/// <param name="pid_Name">DataTable中父id字段的名称</param>
/// <param name="text_Name">DataTable中name字段的名称</param>
private void BindTreeView(DataTable dt, TreeNodeCollection tnc, string pid_val, string id_Name, string pid_Name, string text_Name)
{
dt = GetAllLanmu();
DataView dv = new DataView(dt);//将DataTable存到DataView中,以便于筛选数据
TreeNode tn;//建立TreeView的节点(TreeNode),以便将取出的数据添加到节点中
//以下为三元运算符,如果父id为空,则为构建“父id字段 is null”的查询条件,否则构建“父id字段=父id字段值”的查询条件
string filter = string.IsNullOrEmpty(pid_val) ? pid_Name + " is null" : string.Format(pid_Name + "='{0}'", pid_val);
dv.RowFilter = filter;//利用DataView将数据进行筛选,选出相同 父id值 的数据
foreach (DataRowView drv in dv)
{
tn = new TreeNode();//建立一个新节点
tn.Value = drv[id_Name].ToString();//节点的Value值,一般为数据库的id值
tn.Text = drv[text_Name].ToString();//节点的Text,节点的文本显示
tnc.Add(tn);//将该节点加入到TreeNodeCollection(节点集合)中
BindTreeView(dt, tn.ChildNodes, tn.Value, id_Name, pid_Name, text_Name);//递归(反复调用这个方法,直到把数据取完为止)
}
}
调用:
DataTable dtGetN = db.GetAllLanmu();
BindTreeView(dtGetN, treeLanMu.Nodes, null, "lindex", "parentindex", "lname");
treeLanMu.ExpandAll();
另一种方法:
private void BindTreeView()
{
treeLanMu.Nodes.Clear();
DataTable dtpindex = db.GetAllByParentIndex("-1");
TreeNode unitNode = new TreeNode();
if (dtpindex.Rows.Count!=0)
{
for (int i = 0; i < dtpindex.Rows.Count; i++)
{
string Pname = dtpindex.Rows[i]["lname"].ToString();
unitNode.Text = Pname;
treeLanMu.Nodes.Add(unitNode);
BindDepartmentTree(dtpindex.Rows[i]["lindex"].ToString(), unitNode);
}
}
}
private void BindDepartmentTree(string parentId, TreeNode node)
{
DataTable dt = db.GetAllByParentIndex(parentId);
for (int i = 0; i < dt.Rows.Count; i++)
{
string id = dt.Rows[i]["lindex"].ToString();
string name = dt.Rows[i]["lname"].ToString();
TreeNode snode = new TreeNode(name);
snode.Value = id;
node.ChildNodes.Add(snode);
BindDepartmentTree(id, snode);
}
}
《转》---使用递归方法DataTable 绑定 TreeView的更多相关文章
- datatable绑定comboBox显示数据[C#]
实现功能: datatable绑定comboBox,在下拉菜单中显示对应数据 实现方法: 1.生成datatable,并为combox绑定数据源: comboBox1.DataSource = dt1 ...
- 【Winform】DataTable绑定到ComboBox
我们从数据库中查询出来的数据存放在Datatable中 1.DataTable绑定到ComboBox上 cmbRole.DataSource = datatable; cmbRole.DisplayM ...
- DataGridView插入一行数据和用DataTable绑定数据2种方式
以前不会用DataGridView的时候一直使用DataTable绑定的方式,如下: DataTable table = new DataTable(); //给表添加一列Name,此名字和 tabl ...
- datatable绑定comboBox,在下拉菜单中显示对应数据
实现功能: datatable绑定comboBox,在下拉菜单中显示对应数据 实现方法: .生成datatable,并为combox绑定数据源: comboBox1.DataSource = dt1; ...
- HTTP模拟工具【C#/Winform源码】、Json绑定TreeView控件、使用了MetroModernUI、RestSharp、Dapper.Net、Newtonsoft.Json、SmartThreadPool这几个主要开源框架
HTTP模拟工具 开发语言:C#/Winform开发工具:Visual Studio 2017数据库: SQLite使用框架:界面-MetroModernUI Http请 ...
- c# 后台绑定treeview 多个tab
<wijmo:C1Tabs ID="C1Tab1" runat="server" ><%--OnSelectedChanged="& ...
- 循环遍历DataTable绑定到Table
VoteList2.cs: using System; using System.Collections.Generic; using System.Linq; using System.Web; u ...
- bootstrap DataTable绑定数据带服务器分页
<!-- DataTables --> 这两个文件在我的文件夹里面<script src="~/bower_components/datatables.net/js/jq ...
- c# 后台绑定treeview 单个tab
<wijmo:C1TreeView ID="C1TreeView1" runat="server" ShowCheckBoxes="true&q ...
随机推荐
- 使用escape编码地址栏中的中文字符
在通过地址栏传递参数的时候,有时候会遇到中文参数,在获取这种中文参数值得时候, 往往会出现乱码, 解决办法如下: 在传递参数的使用 escape 函数进行编码,获取的时候再进行解码即可. 例如: va ...
- python_way ,day11 线程,怎么写一个多线程?,队列,生产者消费者模型,线程锁,缓存(memcache,redis)
python11 1.多线程原理 2.怎么写一个多线程? 3.队列 4.生产者消费者模型 5.线程锁 6.缓存 memcache redis 多线程原理 def f1(arg) print(arg) ...
- Xcode:Foundation框架找不到,或者是自动提示出现问题
问题描述:Foundation框架找不到,或者是自动提示出现问题 之前的操作:手贱,不少心把编译器里面的源码改了 处理办法:清理缓存 缓存位置:点击桌面后,选择系统菜单栏:前往—电脑—硬盘—用户—ap ...
- css 集锦。
可以是 链接的下划线 去掉. a {text-decoration: none} position:absolute 绝对定位 position:relative 相对定位 ie 图片失真 -ms ...
- Spring读书笔记-----Spring的Bean之Bean的基本概念
从前面我们知道Spring其实就是一个大型的工厂,而Spring容器中的Bean就是该工厂的产品.对于Spring容器能够生产那些产品,则取决于配置文件中配置. 对于我们而言,我们使用Spring框架 ...
- Java实现分页数据获取CachedRowSet
步骤 1.加载驱动 2.连接数据库 3.创建ResultSet 4.创建CacheRowSet 5.设置并获取分页数据 6.执行查询,展示数据 package ch13; import javax.s ...
- (五)stm32工程代码HardFault异常查错调试方法
一.导致异常的原因很多,例如:直接使用未分配空间的指针.栈溢出等一场非法操作便会使程序进入HardFault异常状态.下面介绍怎么找出程序中的异常. 接下来在keil_MDK工程中,编译代码,并deb ...
- iOS开发之真机测试
profile 位置在 /Users/userName/Library/MobileDevice/Provisioning Profiles /Users/user_lzz/Library/Mobi ...
- for循环与for in循环
json是js里的一种数据格式.var obj={a:15,b:8,c:12} json数组对象 var arr=[15,8,12]; 数组alert(obj.a); ---15alert(obj[' ...
- VI查找与替换
一.vi查找: 当你用vi打开一个文件后,因为文件太长,如何才能找到你所要查找的关键字呢?在vi里可没有菜单-〉查找, 不过没关系,你在命令模式下敲斜杆(/)这时在状态栏(也就是屏幕左下脚)就出 ...