net TreeView 递归
1、显示效果

2、数据insert脚本
insert into CITY(id,text,pid) values('1','城市',null)
insert into CITY(id,text,pid) values('2','北京市','1')
insert into CITY(id,text,pid) values('3','上海市','1')
insert into CITY(id,text,pid) values('4','天津市','1')
insert into CITY(id,text,pid) values('5','重庆市','1')
insert into CITY(id,text,pid) values('6','湖北省','1')
insert into CITY(id,text,pid) values('7','河北省','1')
insert into CITY(id,text,pid) values('8','山西省','1')
insert into CITY(id,text,pid) values('9','武汉市','6')
insert into CITY(id,text,pid) values('10','黄冈市','6')
insert into CITY(id,text,pid) values('11','石家庄','7')
insert into CITY(id,text,pid) values('12','唐山市','7')
insert into CITY(id,text,pid) values('13','太原市','8')
insert into CITY(id,text,pid) values('14','吉林省','1')
insert into CITY(id,text,pid) values('15','长春市','14')
insert into CITY(id,text,pid) values('16','南关区','15')
3、tvdemo.aspx
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table>
<tr>
<td>
<asp:TreeView ID="TreeView1" runat="server">
</asp:TreeView>
</td> </tr>
</table>
</div>
</form>
</body>
</html>
4、tvdemo.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data; public partial class controlDemo_tvdemoaspx : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ if(!IsPostBack)
{
//练习treview 静态手动添加节点
//TreeDemo(); //练习treview 动态递归添加节点
string sql = "select id,text,pid from CITY ";
DataClass dc = new DataClass();
TreeNode treen = null;
Bind_Tv(dc.GetDataTable(sql), treen, null, "id", "pid", "text"); //练习DataView 过滤结果集(RowFilter)和遍历结果集(foreach(DataRowView row in dv) )
//test();
} } #region 练习DataView 过滤结果集(RowFilter)和遍历结果集(foreach(DataRowView row in dv) )
public void test() {
DataClass dc = new DataClass();
TreeView TreeView1 = new TreeView(); string sql = "select id,text,pid from CITY ";
DataTable dt = new DataTable();
dt = dc.GetDataTable(sql); DataView dv = new DataView(dt); int lin = dv.Count; string filter = " pid = '1'";
dv.RowFilter = filter;//利用DataView将数据进行筛选,选出相同 父id值 的数据 int lin2 = dv.Count;
//foreach (DataRowView row in dv)
//{
// row["Item_ID"].ToString().Trim();
// row["Item_Name"].ToString().Trim();
//}
}
#endregion 练习DataView 过滤结果集(RowFilter)和遍历结果集(foreach(DataRowView row in dv) ) #region treview 静态手动添加节点 public void TreeDemo()
{
TreeNode tn = new TreeNode();
//tn.Value = "0";
tn.Text = "NBA";
TreeView1.Nodes.Add(tn); TreeNode hn = new TreeNode();
hn.Text = "Hoston";
tn.ChildNodes.Add(hn); TreeNode hpn = new TreeNode();
hpn.Text = "YaoMing";
hn.ChildNodes.Add(hpn); TreeNode ln = new TreeNode();
ln.Text = "Laker";
tn.ChildNodes.Add(ln); }
# endregion treview 静态手动添加节点 #region treview 动态递归添加节点
/// <summary>
/// 绑定TreeView(利用TreeNode)
/// </summary>
/// <param name="p_Node">TreeNode(TreeView的一个节点)</param>
/// <param name="pid_val">父id的值</param>
/// <param name="id">数据库 id 字段名</param>
/// <param name="pid">数据库 父id 字段名</param>
/// <param name="text">数据库 文本 字段值</param>
public void Bind_Tv(DataTable dt, TreeNode p_Node, string pid_val, string id, string pid, string text)
{
DataView dv = new DataView(dt);//将DataTable存到DataView中,以便于筛选数据
TreeNode tn;//建立TreeView的节点(TreeNode),以便将取出的数据添加到节点中
//以下为三元运算符,如果父id为空,则为构建“父id字段 is null”的查询条件,否则构建“父id字段=父id字段值”的查询条件
string filter = string.IsNullOrEmpty(pid_val) ? pid + " is null" : string.Format(pid + "='{0}'", pid_val);
dv.RowFilter = filter;//利用DataView将数据进行筛选,选出相同 父id值 的数据
//int lin = dv.Count; foreach (DataRowView row in dv)
{
tn = new TreeNode();//建立一个新节点(学名叫:一个实例)
if (p_Node == null)//如果为根节点
{
tn.Value = row[id].ToString().Replace(" ", "");//节点的Value值,一般为数据库的id值
tn.Text = row[text].ToString().Replace(" ", "");//节点的Text,节点的文本显示
TreeView1.Nodes.Add(tn);//将该节点加入到TreeView中
Bind_Tv(dt, tn, tn.Value, id, pid, text);//递归(反复调用这个方法,直到把数据取完为止)
//tn.Value除了根节点以后就是有值了!!!
}
else//如果不是根节点
{
tn.Value = row[id].ToString().Replace(" ", "");//节点Value值
tn.Text = row[text].ToString().Replace(" ", "");//节点Text值
p_Node.ChildNodes.Add(tn);//该节点加入到上级节点中
Bind_Tv(dt, tn, tn.Value, id, pid, text);//递归
}
}
} #endregion treview 动态递归添加节点
}
5、GetDataTable 返回Datatable方法
public DataTable GetDataTable(string sql)
{
this.OpenConnection();
this.cmd = new SqlCommand(sql, this.conn);
this.sdap = new SqlDataAdapter(this.cmd);
this.ds = new DataSet();
sdap.Fill(ds);
newdt = ds.Tables[]; return newdt;
}
net TreeView 递归的更多相关文章
- WinForm 进程、线程、TreeView递归加载、发送邮件--2016年12月13日
进程:一个程序就是一个进程,但是也有一个程序需要多个进程来支持的情况 进程要使用的类是:Process它在命名空间:System.Diagnostics; 静态方法Start(); Process.S ...
- winform进程、线程、TreeView递归加载
进程: 一般来说,一个程序就是一个进程,不过也有一个程序需要多个进程支持的情况. 进程所使用的类:Process 所需命名空间:System.Diagnostics; 可以通过进行来开启计算机上现有的 ...
- TreeView递归绑定无限分类数据
TreeView递归绑定无限分类数据 实现一个动态绑定,无限级分类数据时,需要将数据绑定到TreeView控件,分类表的结构是这样的: 字段 类型 Id int ParentId int Name N ...
- treeview递归加载
实体类: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ...
- TreeView递归取值
string jingyuan = ""; string jinghui = ""; private void DiGui(TreeNode tn) { if ...
- TreeView递归绑定数据的两种方法
#region 绑定TreeView /// <summary> /// 绑定TreeView(利用TreeNode) /// </summary> /// <param ...
- WinForm TreeView递归加载
这个其实通俗一点讲就是的树状分支图 首先利用递归添加数据 数据放入 treeView1.Nodes.Add() 中 public Form3() { InitializeComponent(); Tr ...
- WPF TreeView递归遍历相关方法
/// <summary> /// 递归改变组织树选中状态. /// </summary> /// <param name="org">< ...
- treeview递归
1.数据库 table A( ID int pk, Value varchar, Fid int ) A: ID Value Fid 1 value1 0 2 value2 ...
随机推荐
- Maximo子表中增加附件功能
附件功能的实现(详见ewell.webclient.beans.warranty.WarrantysDateBean ,ewell.webclient.beans.doclinks.custom.Ad ...
- 让ztree树默认是关闭的
只需要在ztree的回调函数中加 var treeObj = $.fn.zTree.getZTreeObj("zTreeContent");treeObj.expandAll(tr ...
- 转 Selenium+Python+Eclipse网页自动化集成环境配置(附简单的测试程序)
1 JDK.Python环境变量配置 下载JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html,直接双击安装, ...
- 使用Gson解析json
前边的博客说过将json解析成java的方法,使用的是 这几个jar包,但是在解析时层遇到一个问题,就是在将时间字符串转换为java的Timestamp对象时会抛出异常,这个问题一直放在哪里没有去解决 ...
- [Altera]PLL仿真
EDA Tools: 1.Quartus II 13.1(64-bit) 2.Modelsim SE-64 10.1c Time: 2016.05.05 ----------------------- ...
- leetcode 4. Median of Two Sorted Arrays
https://leetcode.com/problems/median-of-two-sorted-arrays/ There are two sorted arrays nums1 and num ...
- 第十二课:Sizzle引擎详解
这篇博客难度太大,跟前端开发其实没什么关系,如果你想成为大牛,那就去了解下吧.如果你还不想,那可以忽略,毕竟面试官也不会问到这里来,因为他也不太懂.呵呵. Sizzle引擎是jQuery的选择器,它大 ...
- CRM域用户误删恢复
记录一下: 不小心将CRM用户在域中删除了(CRM中未删除),直接新建一个同样账号的域用户然后尝试在CRM中登录报“invalid user”错误,一番检查发现从2011版本开始CRM中不单记录了用户 ...
- hive中分号问题
分号是sql的结束符,在hql中亦如此,但是hive对分号的识别没有那么智能,如下: select concat(';','aa') from lhc limit 1; FAILED: Parse E ...
- dma驱动
http://www.crifan.com/files/doc/docbook/dma_pl08x_analysis/release/html/dma_pl08x_analysis.html#idp2 ...