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 ...
随机推荐
- Dev ChartControl鼠标移动显示坐标点
his.chartIRC_RATES.MouseMove += new MouseEventHandler(chartIRC_RATES_MouseMove); ToolTipController t ...
- NHibernate系列文章二十八:NHibernate Mapping之Auto Mapping(附程序下载)
摘要 上一篇文章介绍了Fluent NHibernate基础知识.但是,Fluent NHibernate提供了一种更方便的Mapping方法称为Auto Mapping.只需在代码中定义一些Conv ...
- asp.net mvc在windows server 2003上部署
1.要安装mvc3.mvc4.mvc5的插件 2.部署要创建应用程序池,并指定 3.权限指定everyone
- UI颜色值
UI颜色值 http://xh.5156edu.com/page/z1015m9220j18754.html
- 转: windows下面安装Python和pip终极教程
原文: http://www.cnblogs.com/yuanzm/p/4089856.html 因为如果是初学者在windows环境下安装,简直是折磨人,会遇到各种蛋疼的情况.本文希望提供傻瓜式的教 ...
- {Reshipt}{文白}{资治通鉴}
this article came from 360doc ====================================================================== ...
- bash coding to changeNames
____通配符和正则表达式 此处的定义只针对linux 中的shell语言,对其它语言不适用 _正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep.awk.sed等命令可以支持正则表 ...
- 第三课:sea.js模块加载原理
模块加载,其实就是把js分成很多个模块,便于开发和维护.因此加载很多js模块的时候,需要动态的加载,以便提高用户体验. 在介绍模块加载库之前,先介绍一个方法. 动态加载js方法: function l ...
- MFC中无边框窗口的拖动
void CXXXXDialog::OnLButtonDown(UINT nFlags, CPoint point) { PostMessage(WM_NCLBUTTONDOWN, HTCAPTI ...
- 在windows下使用visual studio code建立.NET Core console程序
开发环境准备 下载vs code,.NET Core sdk: https://www.microsoft.com/net/core#windowscmd 目前最新版为code 1.8.1,.NET ...