根据数据库的记录动态生成菜单并添加相应的单击事件

时间:2021-05-04 15:33:11
解决办法:通根据数据库依据菜单标识查询出一级菜单及其子菜单,在页面添加一个Menu控件, 最后为Menu控件赋值解决办法(红色代码为为菜单添加单击事件的代码):
界面代码:          
<asp:Menu ID="Menu1" runat="server" Orientation="Horizontal"
                  DynamicEnableDefaultPopOutImage="False" StaticEnableDefaultPopOutImage="false"
                  DenamicEnableDefaultPopOutImage="false" DynamicVerticalOffset ="10" Height="20px"
                  <span style="color:#ff0000;">OnMenuItemClick="Menu1_MenuItemClick"</span> Width="100%"> 
          </asp:Menu>
界面逻辑代码:
private void LoadMenu()
          {
            DataTable table = new LoadMenu().GetRootMenu();
            for (int i = 0; i < table.Rows.Count; i++)
            {
                MenuItem menuRootNode = new MenuItem();
<span style="white-space:pre">		<span style="color:#ff0000;">Menu1.MenuItemClick +=Menu1_MenuItemClick;</span></span>
                menuRootNode.Text = table.Rows[i]["MenuName"].ToString();
                menuRootNode.Value = table.Rows[i]["MenuID"].ToString();
                string rootImagePath = table.Rows[i]["MenuIcon"].ToString();
                if (!(string.IsNullOrEmpty(rootImagePath)))
                {
                    menuRootNode.ImageUrl = rootImagePath;
                }
                DataTable table1 = new LoadMenu().GetChildMenu(Convert.ToInt32(menuRootNode.Value));
                for (int j = 0; j < table1.Rows.Count; j++)
                {
                    MenuItem menuChildNode = new MenuItem();
                    menuChildNode.Text = table1.Rows[j]["MenuName"].ToString();
                    menuChildNode.Value = table1.Rows[j]["MenuID"].ToString();
                    string childImagePath = table1.Rows[j]["MenuIcon"].ToString();
                    if (!(string.IsNullOrEmpty(childImagePath)))
                    {
                        menuChildNode.ImageUrl = childImagePath;
                    }
                    menuChildNode.Enabled = true;
                    menuRootNode.ChildItems.Add(menuChildNode);
                }
                menuRootNode.Enabled = true;
                Menu1.Items.Add(menuRootNode);
            }
        }
<span style="color:#ff0000;">protected void Menu1_MenuItemClick(Object sender,
        System.Web.UI.WebControls.MenuEventArgs e)
        {
            switch (e.Item.Text.ToLower())
            {
                case "task":
                    Console.WriteLine(e.Item.NavigateUrl);
                    return;
                case "system":
                    Console.WriteLine(e.Item.NavigateUrl);
                    return;
                case "user":
                    Console.WriteLine(e.Item.NavigateUrl);
                    return;
            }
        }</span>
后台 逻辑代码:
<span style="color:#333333;">public class LoadMenu
 {
     /// <summary>
     /// Get the root menu. Add by lqf 2014/06/04
     /// </summary>
     /// <returns></returns>
     public DataTable GetRootMenu() {
         StringBuilder str = new StringBuilder();
         str.Append("select * from Menu where ParentMenuID = 0 order by MenuOrder");
         DataTable table = DataFactory.SqlDataBase().GetDataTableBySQL(str);
         if(table.Rows.Count <= 0){
             throw new Exception("Error:Menu item load failure!");
         }
         return table;
     }
 
     /// <summary>
     /// Get the child menu. Add by lqf 2014/06/04
     /// </summary>
     /// <param name="parentMenuId"></param>
     /// <returns></returns>
     public DataTable GetChildMenu(int parentMenuId) {
         StringBuilder str = new StringBuilder();
         str.Append("select * from Menu where ParentMenuID = @ParentMenuID");
         SqlParam[] param = { new SqlParam("@ParentMenuID", parentMenuId) };
         return DataFactory.SqlDataBase().GetDataTableBySQL(str, param);
     }
 }</span>