VS2005利用TreeView控件和递归函数从数据库动态生成树状菜单

 1  using  System; 
 2  using  System.Data; 
 3  using  System.Configuration; 
 4  using  System.Web; 
 5  using  System.Web.Security; 
 6  using  System.Web.UI; 
 7  using  System.Web.UI.WebControls; 
 8  using  System.Web.UI.WebControls.WebParts; 
 9  using  System.Web.UI.HtmlControls; 
10  using  System.Data.SqlClient; 
11  public   partial   class  _Default : System.Web.UI.Page 
12 
13       private   void  Page_Load( object  sender, System.EventArgs e) 
14      { 
15           //  定义数据库连接 
16          SqlConnection conn  =   new  SqlConnection(); 
17           // 初始化连接字符串 
18          conn.ConnectionString =   " data source=.;initial catalog=mybookshop;uid=sa;pwd=sa; "
19          conn.Open(); 
20          SqlDataAdapter da  =   new  SqlDataAdapter( " select * from NodeInfo " ,conn); 
21          DataSet ds  =   new  DataSet (); 
22          da.Fill(ds); 
23           this .ViewState[ " ds " ] = ds; 
24          conn.Close(); 
25           // 调用递归函数,完成树形结构的生成 
26          AddTree( 0 , (TreeNode) null ); 
27      } 
28 
29       // 递归添加树的节点 
30       public   void  AddTree( int  parentNodeId, TreeNode pNode) 
31      { 
32          DataSet ds  =  (DataSet) this .ViewState[ " ds " ]; 
33          DataView dvTree  =   new  DataView(ds.Tables[ 0 ]); 
34           // 过滤parentNodeId,得到当前的所有子节点 
35          dvTree.RowFilter  =   " [parentNodeId] =  "   +  parentNodeId; 
36 
37           foreach  (DataRowView Row  in  dvTree) 
38          { 
39              TreeNode Node  =   new  TreeNode(); 
40               if  (pNode  ==   null
41              {    
42                   // 添加根节点 
43                  Node.Text  =  Row[ " nodeText " ].ToString(); 
44                  TreeView1.Nodes.Add(Node); 
45                  Node.Expanded  =   true
46                  AddTree( int .Parse(Row[ " nodeId " ].ToString()), Node);     // 再次递归 
47              } 
48               else  
49              {  
50                   // 添加当前节点的子节点 
51                  Node.Text  =  Row[ " nodeText " ].ToString(); 
52                  pNode.ChildNodes.Add(Node); 
53                  Node.Expanded  =   true
54                  AddTree( int .Parse(Row[ " nodeId " ].ToString()), Node);     // 再次递归 
55              } 
56          } 
57      } 
58 
59 
60 

 

 1  using  System; 
 2  using  System.Collections; 
 3  using  System.Configuration; 
 4  using  System.Data; 
 5  using  System.Linq; 
 6  using  System.Web; 
 7  using  System.Web.Security; 
 8  using  System.Web.UI; 
 9  using  System.Web.UI.HtmlControls; 
10  using  System.Web.UI.WebControls; 
11  using  System.Web.UI.WebControls.WebParts; 
12  using  System.Xml.Linq; 
13  using  System.Data.SqlClient; 
14 
15  namespace  TreeViewAndMenuDemo 
16 
17       public   partial   class  _Default : System.Web.UI.Page 
18      { 
19           protected   void  Page_Load( object  sender, EventArgs e) 
20          { 
21               if  ( ! IsPostBack) 
22              { 
23                   // BindTreeView(); 
24              } 
25          } 
26           ///   <summary>  
27           ///  绑定树控件 
28           ///   </summary>  
29           public   void  BindTreeView() 
30          { 
31               string  strcon  =  ConfigurationManager.ConnectionStrings[ " sql " ].ConnectionString; 
32               using  (SqlConnection con  =   new  SqlConnection(strcon)) 
33              { 
34                   string  sql  =   " select * from Table "
35                  SqlDataAdapter da  =   new  SqlDataAdapter(sql, con); 
36                  DataSet ds  =   new  DataSet(); 
37                  da.Fill(ds); 
38                  ViewState[ " ds " =  ds; 
39                  BindRoot(ds); 
40              } 
41          } 
42           ///   <summary>  
43           ///  绑定根节点 
44           ///   </summary>  
45           ///   <param name="ds">   </param>  
46           private   void  BindRoot(DataSet ds) 
47          { 
48              TreeNode root  =   new  TreeNode(); 
49               // 获得最外层节点 
50              DataRow[] dr  =  ds.Tables[ 0 ].Select( " fatherNode=0 " ); 
51               foreach  (DataRow r  in  dr) 
52              { 
53                  TreeNode tn  =   new  TreeNode(); 
54                  tn.Text  =  r[ 2 ].ToString(); 
55                  tn.Target  =  r[ 1 ].ToString(); 
56                  root.ChildNodes.Add(tn); 
57                   // 调用添加子节点方法 
58                 //  AddChildNode(ds,tn); 
59              } 
60              TreeView1.Nodes.Add(root); 
61              TreeView1.ExpandAll(); 
62          } 
63           ///   <summary>  
64           ///  子节点添加方法 
65           ///   </summary>  
66           ///   <param name="ds"> 数据集  </param>  
67           ///   <param name="tn"> 当前节点对象  </param>  
68           private   void  AddChildNode(DataSet ds, TreeNode tn) 
69          { 
70              DataRow[] dr  =  ds.Tables[ 0 ].Select( " fatherNode= " + tn.Target); 
71               foreach  (DataRow r   in  dr) 
72              { 
73                  TreeNode tc  =   new  TreeNode(); 
74                  tc.Text  =  r[ 2 ].ToString(); 
75                  tc.Target  =  r[ 1 ].ToString(); 
76                  tn.ChildNodes.Add(tc); 
77                   // 递归调用 
78                   // AddChildNode(ds, tc); 
79              } 
80          } 
81      } 
82 
83 

 

转载于:https://www.cnblogs.com/haik/archive/2010/01/09/1643002.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值