首先是数据表的设计
其中treeId指的是该菜单项的父ID,如果treeId为0.表示该菜单项为根菜单项,否则表示他为某菜单项的子菜单,比如id为2的项,他的父节点是1.则他是张三的子菜单,而张三是根菜单,position只用于根菜单项,用于控制显示的顺序。
往网页里拖入一个menu控件,然后添加代码
using
System;
using
System.Data;
using
System.Configuration;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Web.UI.HtmlControls;
using
System.Data.SqlClient;
using
System.Data.ProviderBase;
public
partial
class
_Default : System.Web.UI.Page
{
public
int
treeID;
protected
void
Page_Load(
object
sender, EventArgs e)
{
SqlConnection CN =
new
SqlConnection(
"server=.;Trusted_Connection=SSPI;database=MENUDB"
);
//MENUDB是数据库名
//设定数据库操作命令
CN.Open();
SqlCommand Scmd =
new
SqlCommand(
"select * from TB_MENU where treeId=0 order by position"
, CN);
//选出根菜单
SqlDataReader odr = Scmd.ExecuteReader();
while
(odr.Read())
//循环读取
{
MenuItem menuNode =
new
MenuItem();
menuNode.Text = odr[
"names"
].ToString();
menuNode.Value = odr[
"id"
].ToString();
menuNode.Enabled =
true
;
menuNode.NavigateUrl = odr[
"page"
].ToString();
Menu1.Items.Add(menuNode);
//添加到根菜单
treeID = Convert.ToInt16(odr[
"id"
].ToString());
addchildmenu(menuNode);
}
//关闭数据库连接
Scmd.Connection.Close();
}
protected
void
addchildmenu(MenuItem pnode)
//添加子菜单
{
SqlConnection CN =
new
SqlConnection(
"server=.;Trusted_Connection=SSPI;database=MENUDB"
);
|
//设定数据库操作命令
CN.Open();
SqlCommand Scmd1 =
new
SqlCommand(
"select * from TB_MENU where treeID="
+ treeID +
""
, CN);
|
SqlDataReader odr = Scmd1.ExecuteReader();
while
(odr.Read())
{
MenuItem menuNode =
new
MenuItem();
menuNode.Text = odr[
"names"
].ToString();
menuNode.Value = odr[
"id"
].ToString();
menuNode.Enabled =
true
;
menuNode.NavigateUrl = odr[
"page"
].ToString();
pnode.ChildItems.Add(menuNode);
//为当前菜单项添加子菜单
treeID = Convert.ToInt16(odr[
"id"
].ToString());
addchildmenu(menuNode);
//循环添加子菜单
}
//关闭数据库连接
Scmd1.Connection.Close();
}
}
|
最终效果如下图