首页 / 网页编程 / ASP.NET / TreeView的动态显示及利用框架实现导航
        
            TreeView的动态显示及利用框架实现导航2011-02-11 博客园 一抹红在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