TreeView的动态显示及利用框架实现导航

在Asp.net中我们知道TreeView控件可以实现站点导航功能,利用模板加上站点地图作为TreeView的DataSource就可以实现轻松的导航功能。我本次所要实现的导航抛开了模板和站点地图,利用框架动态实现导航。

我们知道,TreeView控件可以静态的预定义其结构,支持的数据源控件有XmlDataSource 和 SiteMapDataSource ,并不支持sqldatasource控件。这次我们的数据源正是数据库,所以我们可以动态的填充TreeView的节点。在实现TreeView的动态填充节点后,我们可以利用iframe框架,来实现导航。

一.对TreeView控件本次所要用到的属性及事件的介绍

1.TreeNode.SelectAction属性:获取或设置选择节点时引发的事件,此属性的值为TreeNodeSelectAction 值之一,默认为TreeNodeSelectAction.Select。TreeView的文本节点可以处于两种模式之一,默认情况下,会有一个节点处于选定状态,即TreeNodeSelectAction.Select,此模式下引发SelectedNodeChanged事件,引发后节点只会展开,不会折叠。若要使一个节点处于导航模式,可以把该节点的 NavigateUrl 属性值设置为空字符串 ("") 以外的值。若要使节点处于选择模式,可以把节点的 NavigateUrl 属性设置为空字符串。

2.TreeNode.PopulateOnDemand属性:该属性只为bool类型,获取或设置一个值,该值指示是否动态填充节点,默认为false。当节点的 PopulateOnDemand 属性设置为 true 时,在运行阶段展开节点时通过回发事件填充节点。若要动态填充节点,必须为 TreeNodePopulate 事件定义填充节点的事件处理方法。

3.TreeNode.TreeNodePopulate事件:当节点的 PopulateOnDemand 属性设置为 true 时,可以触发该事件,以编程的方式动态填充节点。

二.实现TreeView的动态填充节点.

1.由于是获取数据里面的数据,于是写了个SqlHelper类,我前面的一篇文章详细叙述过,里面同样介绍了数据库的关系图,感兴趣的朋友可以参考对DataList控件绑定图片的一点小结 里的部分内容,这里为了不影响阅读,把代码还是贴出来了:

DALHelper类

1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Configuration;
6using System.Data;
7using System.Data.SqlClient;
8namespace DBHelper
9{
10    public class DALHelper
11    {
12        private static string constr = ConfigurationManager.ConnectionStrings["MyNBAData"].ConnectionString;
13        private static SqlConnection connection = new SqlConnection(constr);
14
15        /**//// <summary>
16        /// 检查连接是否打开
17        /// </summary>
18        public static bool CheckConnOpen()
19        {
20            if (connection == null || connection.State == ConnectionState.Closed)
21            {
22                connection.Open();
23                return true;
24            }
25            else
26            {
27                return false;
28            }
29        }
30        /**//// <summary>
31        /// 检查连接是否关闭
32        /// </summary>
33        public static bool CheckConnClosed()
34        {
35            if (connection != null || connection.State == ConnectionState.Open)
36            {
37                connection.Close();
38                return true;
39            }
40            else
41            {
42                return false;
43            }
44        }
45
46        /**//// <summary>
47        /// 获取一个DataTable
48        /// </summary>
49        /// <param name="sql"></param>
50        /// <returns></returns>
51        public static DataTable GetDataTable(string sql)
52        {
53            SqlDataAdapter da = null;
54            DataTable dt = null;
55            try
56            {
57                da = new SqlDataAdapter(sql, connection);
58                dt = new DataTable();
59                da.Fill(dt);
60            }
61            catch (Exception ex)
62            {
63
64                throw new Exception(ex.Message);
65            }
66
67            return dt;
68        }
69
70     /**//// <summary>
71     /// 获取DataReader对象
72     /// </summary>
73     /// <param name="sql"></param>
74     /// <param name="parms"></param>
75     /// <returns></returns>
76        public static SqlDataReader ExecuteReader(string sql, SqlParameter[] parms)
77        {
78            SqlCommand command= null;
79            SqlDataReader reader = null;
80            try
81            {
82                command = new SqlCommand(sql, connection);
83                if (parms!=null)
84                {
85                    foreach (var item in parms)
86                    {
87                        command.Parameters.Add(item);
88                    }
89                }
90                if( CheckConnOpen())
91                {
92                    reader = command.ExecuteReader(CommandBehavior.CloseConnection);
93                }
94
95
96            }
97            catch (Exception ex)
98            {
99
100                throw new Exception(ex.Message);
101            }
102            finally
103            {
104               //CheckConnClosed();
105            }
106            return reader;
107        }
108
109        /**//// <summary>
110        /// 执行数据库的修改,插入,删除
111        /// </summary>
112        /// <param name="sql"></param>
113        /// <param name="parms"></param>
114        /// <returns></returns>
115        public static int ExecuteNonQuery(string sql, SqlParameter[] parms)
116        {
117            SqlCommand command = null;
118            int count = 0;
119            try
120            {
121                command = new SqlCommand(sql, connection);
122                if (parms!=null)
123                {
124                    foreach (var item in parms)
125                    {
126                        command.Parameters.Add(item);
127                    }
128                }
129
130                CheckConnOpen();
131                count = command.ExecuteNonQuery();
132            }
133            catch (Exception ex)
134            {
135
136                throw new Exception(ex.ToString());
137            }
138            finally
139            {
140                CheckConnClosed();
141            }
142            return count;
143        }
144    }
145}
146

时间: 2024-11-03 16:11:22

TreeView的动态显示及利用框架实现导航的相关文章

win7系统利用360安全导航查看电脑安全的方法

  win7操作系统电脑每隔一段时间杀杀毒,清理清理,最常用的就是使用360杀毒软件,那么查完杀毒之后,怎么查看电脑是否安全呢?这时候360安全导航就派上用场了.阅读下文,下面小编和大家讲解win7系统利用360安全导航查看电脑安全的方法. 具体方法如下: 1.单击360杀毒软件图标,弹出对话框,单击"立即体验"按钮,电脑进行检测; 2.360软件发现问题,需要坚决单击"一键修复"按钮,系统进行修复; 3.弹出疑问对话框,选择"忽略"按钮,弹出&

&amp;amp;lt;frame&amp;amp;gt;框架中 导航与子菜单刷新

问题描述 <frame>框架中 导航与子菜单刷新 如图我想实现点击导航菜单上的子菜单时候在2区域显示子菜单列表,同时在3区域显示相应功能, 现在点击导航菜单2处的子菜单会出来,但点击导航子菜单时直接在3处跳出相应页面的功能而2处不出现子菜单 解决方案 估计是你frameset的问题,你贴代码出来我们才好帮你解决.

BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)_javascript技巧

bootstrap框架.导航条.下拉菜单.轮播广告carousel.栅格系统布局.标签页tabs.模态框.菜单定位的个人总结,具体详情如下所示: bootstrap框架 <!DOCTYPE html> <html lang="zh-cn"><!-- 语言设置 --> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible

easyui后台框架左边导航换成树形菜单

问题描述 左边的导航变成树形菜单,哪个高手有现成的代码 解决方案 解决方案二:兄弟你解决了解决了给我发一份谢谢了1430969654@qq.com解决方案三:$('#tt').tree({url:'',//将你的菜单拼成这个json格式id,text,child等onClick:function(node){//点击后在右边的框架里打开url}}); 解决方案四:这个去找个树形菜单,(网上很多一般都是ulli实现)然后自己在后台拼接html然后放到下面div中<divid="wnav&qu

C#中,用treeView和spiltContainer怎么样实现左边菜单导航到右边不同的页面

问题描述 左边固定一个treeview,右边放一个容器控件,点击左边的treeview节点的时候根据节点的不同,用反射机制创建一个你要的控件(就是右边的那一部分,你事先已经做成用户控件),然后调用右边容器的Controls.Add方法,把你刚才的创建那个控件放进去并显示出来就OK了.求一个详细代码或给一个小项目参考一下. 解决方案 解决方案二:代码没有,思路有.为何不尝试自己写下代码.解决方案三:代码写了,但是写不出啦,搞半天调试不对

在浏览器中动态显示图形(利用owc)

动态|浏览器|图形|显示 大家在编写ASP程序的时候,可能要对各种指标以图形的方式显示出来.如果仅仅是柱状图,可以采用画表格的方法.许多投票程序多采用这种方法.如果是饼状图或从数据库中检索数据后再显示,就有些困难了.办法也有,自己可以封装excel来完成上述功能,或者用deiphi做一个activeform传入参数,或者用php来写,java也可以.当然,用一个比较成熟的图形组件来完成更好一些.microsoft office web compoent非常不错.我在开发一个项目的时候,用到了这个

Caliburn Micro 框架中Windows Phone 8使用研究(二)页面导航

背景 对于MVVM 架构的WP程序,一个很关键的问题就是导航,以及导航传参.有过经验的人很清楚WP导航只能在View中进行,并且导航参数也只能在NavigatedTo等View的事件中获取,如此我们便不得不在xaml.cs文件中加上处理,以获取导航参数然后再通过导航参数构造ViewModel.这个过程很痛苦,因为我们不得不再两个文件中来回切换来看我们的逻辑代码. 那么接下来我们看下CM作者的厉害之处(必须承认,真的很厉害), 让我们看下CM框架中导航是什么样子的: 不带参数的情况下: 在View

如何利用个性导航来推广您的站点

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 现在很多人都知道网站推广对提高一个网站的权重.品牌知名度和竞争力是非常重要的.网站推广不仅有助于把网站优化在搜索引擎的前几页,更直接的效益是能够带来流量.那怎样推广呢?让你挤破头脑的去想各种方法,就大量在网站.博客.论坛.贴吧发文章和帖子或关键字.如今这些推广方式耗费精力大,外链不仅上不去,流量也没几个.那么怎样创造增加有价值的外链,以及最直

Dreamweaver8.0制作框架网站

查看全套"dreamweaver8.0教程" 框架是网页中经常使用的页面设计方式,框架的作用就是把网页在一个浏览器窗口下分割成几个不同的区域,实现在一个浏览器窗口中显示多个HTML页面.使用框架可以非常方便的完成导航工作,让网站的结构更加清晰,而且各个框架之间决不存在干扰问题.利用框架最大的特点就是使网站的风格一致.通常把一个网站中页面相同的部分单独制作成一个页面,作为框架结构的一个子框架的内容给整个网站公用. 一个框架结构有两部分网页文件构成: 框架(Frame):框架是浏览器窗口中