关于TreeView的实例
前台代码 (只需要有TreeView控件, 添加ID,其他默认生成)
<form id="form1" runat="server">
<div>
<asp:treeview ID="tree1" ExpandDepth="0" runat="server" />
</div>
</form>
后台代码
Page_Load代码
1 private string myConn = ConfigurationManager.ConnectionStrings["connectionString0"].ConnectionString;
2 protected void Page_Load(object sender, EventArgs e)
3 {
4 if (!IsPostBack)
5 {
6 BindTree(tree1);
7 }
8 }
获取节点
/// <summary>
/// 获得节点 1--当前元素的第几层 2--上级ID 3--更改的数据集
/// </summary>
/// <param name="upDegree">当前元素的第几层</param>
/// <param name="upID">上级ID</param>
/// <param name="ds">更改的数据集</param>
/// <returns>是否成功</returns>
private bool getNode(int upDegree, string upID, ref DataSet ds) {
string myQuery = " select model_ID, model_name, up_ID, degree from Model where degree='" + upDegree + "' and up_ID='" + upID + "';";
SqlConnection conn = new SqlConnection(myConn);
conn.Open();
SqlDataAdapter da = new SqlDataAdapter(myQuery, conn);
da.Fill(ds);
conn.Close();
if (ds.Tables[0].Rows.Count>0)
{
return true;
}
return false;
}
绑定子节点
1 /// <summary>
2 /// 绑定子节点 1--父节点所处级别 2--父节点 return Bool是否有子节点
3 /// </summary>
4 /// <param name="upDegree">第几级</param>
5 /// <param name="tn">父节点</param>
6 /// <returns>是否有子节点</returns>
7 private bool BindChild(int Degree, TreeNode tn){
8 DataSet ds = new DataSet();
9 getNode(Degree+1, tn.Value, ref ds); // 获取节点列表 比当前节点更多
10 DataTable dt = ds.Tables[0]; // 加快ds的读取速度
11 TreeNode tn2 = new TreeNode(); // 新增子节点
12
13 int len = dt.Rows.Count; // 子节点数量
14 bool flag = false; // 是否有子节点 false--无子节点 true--有子节点
15 for (int i = 0; i < len; i++)
16 {
17 tn2 = new TreeNode(dt.Rows[i][1].ToString(), dt.Rows[i][0].ToString()); // 生成需要绑定的节点
18 tn.ChildNodes.Add(tn2); // 增加子节点
19 BindChild(Degree + 1, tn2); // 循环绑定子节点
20 flag = true; // 有子节点
21 }
22 if (!flag) // 当没有叶子节点(最底层的节点)时, 则添加超级链接
23 {
24 tn.NavigateUrl = "http://www.baidu.com";
25 tn.Target = "_blank";
26 }
27 // 销毁占用内存的空间
28 dt.Dispose();
29 ds.Dispose();
30 return flag;
31 }
绑定TreeView树
1 /// <summary>
2 /// 绑定TreeView树 1--treeview的节点ID
3 /// </summary>
4 /// <param name="tv"></param>
5 private void BindTree(TreeView tv)
6 {
7 tv.Nodes.Clear(); // 初始化TreeView
8
9 TreeNode tn = new TreeNode();
10 DataSet ds = new DataSet(); // 获取子节点
11 getNode(1, "00", ref ds); // 获取一级节点
12 DataTable dt = ds.Tables[0]; // DataTable的读取速度快与DataSet;
13
14 int len = dt.Rows.Count;
15 for (int i = 0; i < len; i++) // 绑定节点TreeNode
16 {
17 tn = new TreeNode(dt.Rows[i][1].ToString(), dt.Rows[i][0].ToString()); //
18 if (!BindChild(1, tn)) // 当无子节点的时候,链接百度,也可以设置ViewState的值
19 {
20 tn.NavigateUrl = "http://www.baidu.com";
21 tn.Target = "_blank";
22 }
23 tv.Nodes.Add(tn); // 将节点添加到原来的TreeView中
24 }
25 // 销毁占用内存的空间
26 dt.Dispose();
27 ds.Dispose();
28 }
心得体会 : 也许这个效率很低,不过这个也是我自己写的简单的一部分。整个过程跟DropDownList很像,可以参照添加DropDownList的方法添加;
设计思路 :
首先,先写出关于获取节点的方法, 里面有只需要三个值 当前的模块等级, 模块ID, 模块名字
第二,绑定一级栏目(一级栏目的绑定相对于子节点较为特殊),所以单独写一个方法,当然写成一个方法也是可以。边绑定要判断是否有子节点,如果无子节点则绑定超级链接。
第三,绑定二级栏目、跟一级栏目的获取差不多,
第四, 第一次显示时,模块只需要显示一级模块 即(tree1.ExpandDepth=0)。其他模块默认隐藏
替换方法 : 如果第一次读取数据库时生成XML文件,这样是否可以加快速度,可以减缓对数据库的读取速度。使用XML的方法生成树图,以后再学习.Ending.
关于TreeView的实例的更多相关文章
- 完整的treeview菜单实例
以下是我用treeview控件按部门和员工显示设备领用情况代码. Option Compare Database Dim rec As New ADODB.Recordset Dim re ...
- 基于bootstrap的jQuery多级列表树插件 treeview
http://www.cnblogs.com/mfc-itblog/p/5233453.html http://www.htmleaf.com/jQuery/Menu-Navigation/20150 ...
- bootstrap-treeview
简要教程 bootstrap-treeview是一款效果非常酷的基于bootstrap的jQuery多级列表树插件.该jQuery插件基于Twitter Bootstrap,以简单和优雅的方式来显示一 ...
- 前端动态菜单-bootstrap-treeview
一.bootstrap-treeview 官网 Demo bootstrap-treeview是一款效果非常酷的基于bootstrap的jQuery多级列表树插件.该jQuery插件基于Twitter ...
- 基于bootstrap的jQuery多级列表树插件
简要教程 bootstrap-treeview是一款效果非常酷的基于bootstrap的jQuery多级列表树插件.该jQuery插件基于Twitter Bootstrap,以简单和优雅的方式来显示一 ...
- PythonQt进阶
本文介绍PythonQt和qt之间是如何进行交互操作的 例子是以Qt的TreeView为实例进行介绍 在该例子中,TreeItem不是从Qt中进行的继承,这样的类如果要和Python进行交互,首先需要 ...
- bootstrap-treeview中文API 以及后台JSON数据处理
bootstrap-treeview 简要教程 bootstrap-treeview是一款效果非常酷的基于bootstrap的jQuery多级列表树插件.该jQuery插件基于Twitter Bo ...
- BootStrap-treeview 参考
简要教程 bootstrap-treeview是一款效果非常酷的基于bootstrap的jQuery多级列表树插件.该jQuery插件基于Twitter Bootstrap,以简单和优雅的方式来显示一 ...
- bootStrap-treeview插件
简要教程 bootstrap-treeview是一款效果非常酷的基于bootstrap的jQuery多级列表树插件.该jQuery插件基于Twitter Bootstrap,以简单和优雅的方式来显示一 ...
随机推荐
- 安装SpecCPU2006 on Linux of CentOS6.3, gcc4.4.7
安装SpecCPU2006 on Linux of CentOS6.3, gcc4.4.7 由于在tools/bin目录中只有ia64-linux,所以在直接运行./install.sh脚本时,系统会 ...
- IT菜鸟之VTP应用项目
项目拓扑 项目要求 PC0和PC2能通信,PC1和PC3能通信,其余不能通信. 项目分析 可以通过vlan来实现相同网段不能通信:而相同vlan可以通信,不同vlan不能通信:同时需要用到trunk封 ...
- Linux进阶之链路聚合
CentOS7用命令配置链路聚合 链路聚合是一个计算机网络术语,将多个物理端口汇聚在一起,形成一个逻辑端口,以实现出入流量在各成员端口的负荷分担,交换机根据用户配置的端口负荷分担策略决定网络封包从哪个 ...
- 8.10-11 mount、umount
8.10 mount:挂载文件系统 mount命令可以将指定的文件系统挂载到指定目录(挂载点),在Linux系统下必须先挂载所有的设备,然后才能被访问,挂载其实就是为要访问的设置开个门(开门才能访问) ...
- 3.2-3 tac、more
3.2 tac命令 是cat的反向拼写,因此命令的功能为反向显示文件内容.cat命令是从第一行开始读取文本输出的,而tac则是从最后一行开始读取文本并进行反向输出,需要注意的是,2个命令都是以一行文本 ...
- lvscan 查看系统中存在的所有LVM逻辑卷
相关命令:lvresize,lvreduce,lvextend,lvdisplay,lvcreate,lvremove lvscan指令:扫描逻辑卷[语 法]lvscan [选项][功能介绍]l ...
- 06.ElementUI 2.X 源码学习:源码剖析之工程化(一)
0x.00 前言 在用了5章篇幅 ElementUI源码学习:从零开始搭建Vue组件库汇总 讲解了如何编写一个组件.发布npm以及生成展示文档之后.接下来将分析Element项目的代码结构,学习其工程 ...
- Linux 文件不能被root修改与编辑原因
近段时间公司的一台服务器被恶意添加了一些定时器任务到crond的配置文件"/var/spool/cron/root"里,本想着只要简单使用crontab -e命令把该恶意的任务去除 ...
- GO语言复合类型03---切片
切片相当于长度可以动态扩张的数组 array[start:end]从数组身上截取下标为[start,end)片段,形成切片start代表开始下标,不写默认代表从头开始切end代表结束下标(本身不被包含 ...
- Docker基本原理概述
Docker基本原理概述 Docker是一个用于开发,交付和运行应用程序的开放平台.Docker能够将应用程序与基础架构分开,从而可以快速交付软件.借助Docker,可以以与管理应用程序相同的方式来管 ...