本文主要演示TreeView如何绑定到数据库。
许多应用程序使用TreeView来显示组织。下面演示了TreeView如何绑定到数据库。
数据库结构如下(递归现实):
id(guid) pid(guid)名称
18A 83618-8751-47EF-91a 0-e 2 dcde 42 bb 71 * *公司
c775c 004-48ED-4664-8B0C-8fd 26 FEA 5 f 4 E18A 83618-8751-47EF-91a 0-e 2 dcde 42 bb 71 a部门
a 43696 f 0-A906-4B4A-8 abf-a01f b 7d 54 daf c 775 c 004-48ED-4664-8B0C-8fd 26 FEA 5 f 4 EA部门-1团队
0d 7 FB 83 A-c056-482 e-800 b-52e 20 c 74791 b c 775 c 004-48ed-4664-8b0c-8fd 26 FEA 5 f 4e A部-2队
de 28685 a-AAFF-4876-Abe 1-bb 003d 17 db 6418 a 83618-8751-47EF-91a 0-e 2 dcde 42 bb 71 b部门
绑定到TreeView的最终效果如下:
1、新建一个TreeView控件
二、绑定
2.1 传统做法(行不通)
2.2 正确做法:自己建立一个递归的方法。
2.2.1 递归其实就是方法的重复调用
,下面是我总结的两种方法。新手不懂代码也没关系,直接抄下来用就行了。#区域绑定树视图
///摘要
///绑定TreeView(带有TreeNode)
////摘要
///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
受保护的void Bind_Tv(数据表dt,树节点p_Node,字符串pid_val,字符串id,字符串pid,字符串文本)
{
DataView dv=新数据视图(dt);//将数据表保存在DataView中,以便于数据过滤
TreeNode tn//建立TreeView的节点,将检索到的数据添加到节点中。
//以下是三元运算符。如果父id为空,则是“父id字段为空”的查询条件;否则为“父id字段=父id字段值”的查询条件
字符串过滤器=字符串。IsNullOrEmpty(pid_val)?pid“为空”:字符串。格式(pid ={0} ,PID _ val);
dv。RowFilter=filter//使用DataView过滤数据,选择父id值相同的数据。
foreach(dv中的DataRowView行)
{
TN=new TreeNode();//创建新节点(学名:实例)
If (p_Node==null)//如果是根节点
{
tn。值=行[id]。ToString();//节点的值,一般是数据库的id值
tn。Text=row[text]。ToString();//节点的文本,以及节点的文本显示
树形视图1。nodes . Add(TN);//将此节点添加到TreeView
Bind_Tv(dt,tn,tn。值、id、pid、文本);//递归(重复调用此方法,直到获取数据)
}
否则//如果它不是根节点
{
tn。值=行[id]。ToString();//节点值值
tn。Text=row[text]。ToString();//节点文本值
p_Node。child nodes . Add(TN);//将此节点添加到上级节点。
Bind_Tv(dt,tn,tn。值、id、pid、文本);//递归
}
}
}
///摘要
///绑定TreeView(使用TreeNodeCollection)
////摘要
///param name= TNC treenode collection(treeview的节点集合)/param
///param name=pid_val 父id的值/param
///param name=id 数据库id字段名/param
///param name=pid 数据库父id字段名/param
///param name=text 数据库文本字段值/param
private void Bind_Tv(数据表dt,TreeNodeCollection tnc,字符串pid_val,字符串id,字符串pid,字符串text)
{
DataView dv=新数据视图(dt);//将数据表保存在DataView中,以便于数据过滤
TreeNode tn//建立TreeView的节点,将检索到的数据添加到节点中。
//以下是三元运算符。如果父id为空,则是“父id字段为空”的查询条件;否则为“父id字段=父id字段值”的查询条件
字符串过滤器=字符串。IsNullOrEmpty(pid_val)?pid“为空”:字符串。格式(pid ={0} ,PID _ val);
dv。RowFilter=filter//使用DataView过滤数据,选择父id值相同的数据。
foreach(dv中的数据视图驱动程序)
{
TN=new TreeNode();//建立一个新节点(学名叫:一个实例)
tn .Value=drv[id].ToString();//节点的价值值,一般为数据库的身份证明(识别)值
tn .Text=drv[text].ToString();//节点的文字,节点的文本显示
跨国公司.加(TN);//将该节点加入到TreeNodeCollection(节点集合)中
Bind_Tv(dt,tn .田纳西州子节点.值、id、pid、文本);//递归(反复调用这个方法,直到把数据取完为止)
}
}
#结束区域
2.2.2 调用
2.2.3 关于数据
—》测试数据(作用:模拟一个真实的数据库表),这个方法的作用是建立一个表,表中有三个字段,分别为身份证,父身份证,名称,然后往里面插入些数据。
私有数据表测试表()
{
DataTable dt=new DataTable();
数据行dr
dt .列。Add(新的DataColumn(id ,类型为(Guid)));//id列类型全局唯一标识符
dt .列。Add(新的DataColumn( parent _ id ,type of(Guid)));//父身份证明(识别)列类型全局唯一标识符
dt .列。Add(新的DataColumn( name ,type of(string)));//名称列类型线
//构造公司根节点
dr=dt .NewRow();
var node0=dr[0]=Guid .新的guid();
dr[1]=DBNull .价值;
博士[2]=**公司;
dt .行。添加(dr);
//构造部门节点
字符串[]部门={ A部门, B部门, C部门};
for(int I=0;我部门。长度;i ) {
dr=dt .NewRow();
var node1=dr[0]=Guid .新的guid();
dr[1]=节点0;//(部门节点)属于公司根节点
博士[2]=部门[I];
dt .行。添加(dr);
//构造班组节点
for(int j=1;j 4;j)
{
dr=dt .NewRow();
dr[0]=Guid .新的guid();
dr[1]=节点1;
博士[2]=j 班组;
dt .行。添加(dr);
}
}
返回dt;
}
—》真实数据我们要在数据库中建立三个字段分别为身份证,父身份证,名称,然后向里面插入数据,需要注意的就是第一行数据的父身份证明(识别)要设置为空。
然后调用如下方法把数据库中的数据取出。
///摘要
///取出数据库中数据,生成数据表
////摘要
///param name=str_Con 数据库连接/param
///param name=str_Cmdsql语句/param
///返回/返回
私有数据表exe_Table(字符串str_Con,字符串str_Cmd)
{
数据集ds=新数据集();
using(Oracle连接连接=新的Oracle连接(str _ Con))
{
using(Oracle dataadapter ODA=new Oracle dataadapter(str _ Cmd,conn))
{
conn . Open();
官方发展援助.填充(ds);
}
}
返回ds .表[0];
}
最后在!IsPostBack中调用
如果(!IsPostBack)
{
Bind_Tv(exe_Table(连接字符串, select * from表),树形视图1 .节点,空, id字段, 父身份证明(识别)字段, 名称字段);
}
以上就是本文的全部内容,希望对大家熟练掌握树形视图绑定数据库有所帮助。