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);
            }
        }

    }
}



效果

數據庫設置

菜單效果




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章