【原创】SQL数据库数据绑定到TreeView菜单目录的类方法实现
最近在网上收集了很多TreeView控件从数据库中读取数据的实例,但是发觉都是到处Copy的帖子,很多代码都已经过时,或漏洞百出,编写质量也不高,所以昨晚自己折腾了两个小时完成了这个菜单目录数据绑定的类,希望对大家有用,节省点时间,也希望大家以后有什么好的代码,都能拿出来共享学习。本人能力有限,有错的地方希望指点一二!如果觉得这篇文章对你有帮助,希望支持一下,也好满足我的虚荣心,^_^!
最近在网上收集了很多TreeView控件从数据库中读取数据的实例,但是发觉都是到处Copy的帖子,很多代码都已经过时,或漏洞百出,编写质量也不高,所以昨晚自己折腾了两个小时完成了这个菜单目录数据绑定的类,希望对大家有用,节省点时间,也希望大家以后有什么好的代码,都能拿出来共享学习。本人能力有限,有错的地方希望指点一二!如果觉得这篇文章对你有帮助,希望支持一下,也好满足我的虚荣心,^_^!
代码如下:
Code
1using System;
2using System.Data;
3using System.Configuration;
4using System.Linq;
5using System.Web;
6using System.Web.Security;
7using System.Web.UI;
8using System.Web.UI.HtmlControls;
9using System.Web.UI.WebControls;
10using System.Web.UI.WebControls.WebParts;
11using System.Xml.Linq;
12using System.Data.SqlClient;
13
14/**//// <summary>
15/// 名称:菜单目录树类
16/// 功能:实现从Sql数据库中读取菜单数据并绑定到TreeView控件
17/// 作者:陈智敏
18/// 完成日期:2008/10/27
19/// </summary>
20
21public class MenuTree
22{
23 public string SqlConnectionString; //获取数据库连接字符串
24 private SqlConnection cn; //创建SQL连接
25 private SqlDataAdapter sda; //创建SQL数据适配器
26 private DataSet ds; //创建数据集
27 private TreeView tv; //创建树视图
28 private DataView dv; //创建视图
29
30 /**//// <summary>
31 /// 返回DataSet数据集
32 /// </summary>
33 /// <param name="strSql">SQL语句</param>
34 public void GetDataSet(string strSql)
35 {
36 #region
37 cn = new SqlConnection(SqlConnectionString);
38 cn.Open();
39 string str = "select * from ";
40 str += strSql;
41 sda = new SqlDataAdapter(str, cn);
42 ds = new DataSet();
43 sda.Fill(ds);
44 if (cn != null)
45 {
46 cn.Close();
47 cn.Dispose();
48 }
49 #endregion
50 }
51
52 /**//// <summary>
53 ///递归添加树的节点
54 /// </summary>
55 /// <param name="dst">绑定到菜单的数据集</param>
56 public void BindTV(TreeView TreeView1)
57 {
58 tv = TreeView1;
59 AddTree(0, (TreeNode)null);
60 }
61 void AddTree(int ParentID, TreeNode pNode)
62 {
63 dv = new DataView(ds.Tables[0]);
64 //过滤ParentID,得到当前的所有子节点
65 dv.RowFilter = "[PARENTID] = " + ParentID;
66
67 foreach (DataRowView Row in dv)
68 {
69 TreeNode Node = new TreeNode();
70 if (pNode == null)
71 { //添加根节点
72 Node.Text = Row["ConText"].ToString();
73 tv.Nodes.Add(Node);
74 Node.Expanded = true;
75 AddTree(Int32.Parse(Row["ID"].ToString()),Node); //再次递归
76 }
77 else
78 { //̀添加当前节点的子节点
79 Node.Text = Row["ConText"].ToString();
80 //pNode.Nodes.Add(Node);
81 pNode.ChildNodes.Add(Node);
82 Node.Expanded = true;
83 AddTree(Int32.Parse(Row["ID"].ToString()),Node); //再次递归
84 }
85 }
86 }
87}
88
89
1using System;
2using System.Data;
3using System.Configuration;
4using System.Linq;
5using System.Web;
6using System.Web.Security;
7using System.Web.UI;
8using System.Web.UI.HtmlControls;
9using System.Web.UI.WebControls;
10using System.Web.UI.WebControls.WebParts;
11using System.Xml.Linq;
12using System.Data.SqlClient;
13
14/**//// <summary>
15/// 名称:菜单目录树类
16/// 功能:实现从Sql数据库中读取菜单数据并绑定到TreeView控件
17/// 作者:陈智敏
18/// 完成日期:2008/10/27
19/// </summary>
20
21public class MenuTree
22{
23 public string SqlConnectionString; //获取数据库连接字符串
24 private SqlConnection cn; //创建SQL连接
25 private SqlDataAdapter sda; //创建SQL数据适配器
26 private DataSet ds; //创建数据集
27 private TreeView tv; //创建树视图
28 private DataView dv; //创建视图
29
30 /**//// <summary>
31 /// 返回DataSet数据集
32 /// </summary>
33 /// <param name="strSql">SQL语句</param>
34 public void GetDataSet(string strSql)
35 {
36 #region
37 cn = new SqlConnection(SqlConnectionString);
38 cn.Open();
39 string str = "select * from ";
40 str += strSql;
41 sda = new SqlDataAdapter(str, cn);
42 ds = new DataSet();
43 sda.Fill(ds);
44 if (cn != null)
45 {
46 cn.Close();
47 cn.Dispose();
48 }
49 #endregion
50 }
51
52 /**//// <summary>
53 ///递归添加树的节点
54 /// </summary>
55 /// <param name="dst">绑定到菜单的数据集</param>
56 public void BindTV(TreeView TreeView1)
57 {
58 tv = TreeView1;
59 AddTree(0, (TreeNode)null);
60 }
61 void AddTree(int ParentID, TreeNode pNode)
62 {
63 dv = new DataView(ds.Tables[0]);
64 //过滤ParentID,得到当前的所有子节点
65 dv.RowFilter = "[PARENTID] = " + ParentID;
66
67 foreach (DataRowView Row in dv)
68 {
69 TreeNode Node = new TreeNode();
70 if (pNode == null)
71 { //添加根节点
72 Node.Text = Row["ConText"].ToString();
73 tv.Nodes.Add(Node);
74 Node.Expanded = true;
75 AddTree(Int32.Parse(Row["ID"].ToString()),Node); //再次递归
76 }
77 else
78 { //̀添加当前节点的子节点
79 Node.Text = Row["ConText"].ToString();
80 //pNode.Nodes.Add(Node);
81 pNode.ChildNodes.Add(Node);
82 Node.Expanded = true;
83 AddTree(Int32.Parse(Row["ID"].ToString()),Node); //再次递归
84 }
85 }
86 }
87}
88
89
对了忘记说明
ID为结点编码
ConText为结点内容
ParentID为父节点编码
宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒。