Asp.net中动态Menu的实践



1、在页界中添加MENU控件;

<asp:Menu ID="Menu1" runat="server" StaticSubMenuIndent="10px" Orientation="Horizontal">
Orientation="Horizontal"  //保证菜单为水平排列
2、在数据库中建立Menu表,以便存放Menu信息
create table menu
(
id int primary key identity(1,1), //主键
pid int,                          //pid为0为菜单的一级,子菜单的pid应该是所对应的父菜单的id
txt nvarchar(50),                 //菜单名称
mtarget nvarchar(50),             //菜单点击后对应的窗体,可以为"_self","_bland"或指定frame或iframe的名称
url nvarchar(200)
)
3、页面所对应的程序
<pre class="csharp" name="code">using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;

public partial class Content : System.Web.UI.Page
{
    protected static int ParentID = 0;

    protected void Page_Load(object sender, EventArgs e)
    {
        Label1.Text = Session["Username"].ToString();
        if(!Page.IsPostBack)
        {
            DataRow[] rows = DSMenu.Tables[0].Select("pid="+ParentID);
            if (rows.Length > 0)
            {
                for (int i = 0; i < rows.Length; i++)
                {
                    MenuItem pNode = new MenuItem();
                    pNode.Value = rows[i]["id"].ToString();
                    pNode.Text = rows[i]["txt"].ToString();
                    pNode.NavigateUrl = rows[i]["url"].ToString();
                    pNode.Enabled = true;
                    pNode.Target = rows[i]["mtarget"].ToString();
                    Menu1.Items.Add(pNode);
                    int pid = Convert.ToInt32(rows[i]["id"]);
                    this.FillMenu(pNode, pid);
                }
            }
        }
    }
    protected DataSet _dsmenu = null;
    protected DataSet DSMenu
    {
        get
        {
            if (_dsmenu == null)
            {
                Db MenuC = new Db();
                MenuC.DbOpen();
                SqlCommand Cmd = new SqlCommand("SELECT * FROM MENU ", MenuC.cOn);
                SqlDataAdapter da = new SqlDataAdapter(Cmd);
                DataSet ds = new DataSet();
                da.Fill(ds);
                MenuC.DbClose();
                _dsmenu = ds;
            }
            return _dsmenu;
        }
    }
    protected void FillMenu(MenuItem pNode,int pid)
    {
        DataRow[] rows = DSMenu.Tables[0].Select("pid="+pid+"");
        if (rows.Length > 0)
        {
            for (int i = 0; i < rows.Length; i++)
            {
                MenuItem cNode = new MenuItem();
                cNode.Value = rows[i]["id"].ToString();
                cNode.Text = rows[i]["txt"].ToString();
                cNode.NavigateUrl = rows[i]["url"].ToString();
                cNode.Enabled = true;
                cNode.Target = rows[i]["mtarget"].ToString();
                pNode.ChildItems.Add(cNode);
                pid = Convert.ToInt32(rows[i]["id"]);
                FillMenu(cNode, pid);
            }
        }

    }
}



效果

数据库设置

菜单效果




©️2020 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值