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 ...
随机推荐
- 关于Java static 的学习心得
static,大家都很熟悉.但是要说真的懂,那就很少了.(当然我也不是很懂,但不妨碍学习吗.) 首先,我认为static修饰的成员就是属于类本身的成员.如果你加了一个static修饰符,好吧,那就相当 ...
- <读书笔记> 代码整洁之道
概述 1.本文档的内容主要来源于书籍<代码整洁之道>作者Robert C.Martin,属于读书笔记. 2.软件质量,不仅依赖于架构和项目管理,而且与代码质量紧密相关,本书提出一 ...
- 学习计划-----java初级工程师
目标: 1.具备扎实的JAVA基础,对数据结构.基本算法熟练掌握,并具备基本的算法设计能力. 2.前台:精通JSP/Servlet.HTML.JavaScript.Ajax.Jquery, XML.J ...
- python---进程、线程
一.进程 二.线程 1,使用Thread类创建线程 #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'zhoufeng' impor ...
- 《CoffeeScript应用开发》学习:第三章-构建简单的应用程序
字符串插值 CoffeeScript提供了一种更好的构建字符串的解决方案.在双引号字符串(单引号无效)中使用#{}包含一个动态的值. str = 'Hello, CoffeeScript.' cons ...
- 树莓派(rasperberry pi 2)上装mysql远程无法访问
于是组合关键字(树莓派 mysql)求百度问谷歌.未果.操刀自己来吧.检查mysql的配置文件 /etc/mysql/my.cnf 发现如下配置 # Instead of skip-networkin ...
- python3.5------三级菜单
笔者QQ :360212316 逻辑图 代码 city = { "华南": { "广东": ["广州市", "佛山市", ...
- [vivado系列]Zynq开发常用文档
时间:2016.06.13 目的:阶段性总结学习的策略 ------------------------------------------------------------------------ ...
- app跳转openURL,兼容方法
- (void)openScheme:(NSString *)scheme { UIApplication *application = [UIApplication sharedApplicat ...
- 循序渐进Python3(十一) --5-- 同源策略
一.什么是同源策略 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能.它是由Netscape提出的一个著名的安全策略,现在所有的可支持javascript ...