.net常用技能之:网站菜单(TreeView)加载

本文介绍了一种使用 ASP.NET 实现动态加载多级菜单的方法。通过设计数据库表结构并利用 C# 后台代码配合 asp:TreeView 控件完成菜单数据的动态展示。文章详细展示了从数据库查询到前台显示的全过程。

  该功能最终实现的目标如下图所示:

  其中菜单的数据来源于数据库,用于实现菜单数据的动态加载和管理。如上图所示,菜单最多时共有四级。

为实现上述功能,本人将数据库的表结构设计如下,如图所示:

表设计完成后,本人采取以下方法来实现上述功能,代码参照以下:

前台代码:

 

1     <div>
2         <asp:TreeView ID="TreeView1" runat="server">
3         </asp:TreeView>
4     </div>

 

 

后台代码为:

首先实现加载所有根节点:

 1     SqlConnection conn = null;
 2     DataTable dtParent = null;
 3     DataTable dtChild = null;
 4 
 5     protected void Page_Load(object sender, EventArgs e)
 6     {
 7         LoadMainTree();
 8     }
 9 
10     protected void LoadMainTree()
11     {
12         //页面加载时清空
13         this.TreeView1.Nodes.Clear();
14 
15         //从数据库表中查询树节点
16         //连接数据库
17         SqlConn();
18         conn.Open();
19 
20         //返回查询结果集DataTable
21         dtParent=SelectTreeNodes("select * from MainMenu");
22 
23         if (dtParent != null && dtParent.Rows.Count > 0)
24         {
25             foreach (DataRow row in dtParent.Rows)
26             {
27                 TreeNode node = new TreeNode();
28                 node.Text=row["TreeName"].ToString();
29                 node.Value = row["ID"].ToString();
30                 node.Expanded = true;
31                 TreeView1.Nodes.Add(node);
32 
33                 //返回查询结果集,查询所有子菜单内容,将查询结果保存至DataTable中
34                 dtChild = SelectTreeNodes("select * from MenuContent where MainID='" + node.Value + "'");
35                 //追加子树节点
36                 AddChildNodes(node, row["ID"].ToString(),0);   //, dt.Rows[0]["nodeOrder"].ToString()
37             }
38         }
39 
40         conn.Close();
41     }

 

其中,函数AddChildNodes(node, row["ID"].ToString(),0);  用于加载所有的子菜单节点,参数node表示当前节点,参数row["ID"].ToString()用于传递当前节点的ID值,用于查询子节点的父节点,参数0表示当前为根节点。

AddChildNodes()定义如下:

 

ExpandedBlockStart.gif代码
 1 protected void AddChildNodes(TreeNode node,string mainId,int parentID)     
 2     {
 3         //筛选MainID等于mainId的所有菜单项
 4         DataView dataView = new DataView(dtChild, "MainID='" + mainId + "' and ParentNodeId='" + parentID + "'""NodeOrder", DataViewRowState.CurrentRows);
 5 
 6         foreach (DataRowView row in dataView)
 7         {
 8             TreeNode childNode = new TreeNode();
 9             childNode.Text = row["TreeName"].ToString();
10             childNode.Value = row["ID"].ToString();
11 
12             node.Expanded = true;
13             node.ChildNodes.Add(childNode);
14 
15             AddChildNodes(childNode,row["MainID"].ToString(),int.Parse(row["ID"].ToString()));    
16         }
17     } 

 

以上部分为实现上述功能的代码,表结构和代码实现方式上可能还有很多不成熟之处。

如有哪位热心的高手指点或指正一下,小弟将感激不尽~,谢谢。

 

转载于:https://www.cnblogs.com/myroad/archive/2010/02/09/1666607.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值