动态菜单和子菜单“按代码"在C#中 [英] Dynamic Menu and SubMenu "By Code" In C#

查看:119
本文介绍了动态菜单和子菜单“按代码"在C#中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好,

我正在尝试通过代码创建动态菜单(我正在从SQL数据库中读取菜单项).
但是问题是我无法创建子菜单.
例如,我可以创建一个名为 FILE 的菜单,并在其下创建一个菜单项,从而产生 NEW ,但是我不能在其下添加菜单项( PROJECT ) menuItem NEW .

Hello,

Im trying to create a dynamic menu by code (I''m reading the menu items from a SQL database).
But the problem is that I''m not able to create a sub menu.
For example I can create a menu titled FILE and a menuItem under it titeld NEW but I can''t add a menuitem (PROJECT)under the menuItem NEW.

            MainMenu MMenu = new MainMenu();
            DataTable DT_Menu = GetDataTable();

            foreach (DataRow DR in DT_Menu.Rows)
            {               
                if (Convert.ToBoolean(DR["M_Header"]) == true) 
                {
                    MenuItem MItem = new MenuItem();
                    MItem.Name = DR["M_Name"].ToString();
                    MItem.Text = DR["M_Text"].ToString();
                    MMenu.MenuItems.Add(MItem);                    
                }
                else
                {                    
                        MenuItem CMItem = new MenuItem();
                        CMItem.Name = DR["M_Name"].ToString();
                        CMItem.Text = DR["M_Text"].ToString();

                        MenuItem ExistMnu = new MenuItem();
                        ExistMnu = (MenuItem) MMenu.MenuItems[DR["M_Parent"].ToString()];
                        if (ExistMnu != null)
                        {
                            ExistMnu.MenuItems.Add(CMItem);
                        }                    
                }
            }
            Menu = MMenu;
        }

        public DataTable GetDataTable()
        {
            DataTable DT = new DataTable("MENU");

            DataColumn Pmry2 = new DataColumn("M_Parent", typeof(string));
            Pmry2.Unique = false;
            DataColumn Pmry3 = new DataColumn("M_Name", typeof(string));
            Pmry3.Unique = true;

            DT.Columns.Add(Pmry2);
            DT.Columns.Add(Pmry3);
            DT.Columns.Add("M_Text", typeof(string));
            DT.Columns.Add("M_Header", typeof(bool));

            DataColumn[] myPrimaryKeyColumns = new DataColumn[2];
            myPrimaryKeyColumns[1] = DT.Columns["M_Name"];            
            DT.PrimaryKey = myPrimaryKeyColumns;

            DT.Rows.Add("" , "File", "FILE", true);
            DT.Rows.Add("File", "New", "NEW", false);            
            DT.Rows.Add("New", "Project", "PROJECT", false);            

            return DT; 
        }
    }
}



在此先感谢您.



Thanks in advance.

推荐答案

您快到了. MenuItem具有属性MenuItems(以及菜单).您只需要使用MenuItem.MenuItems.Add(existingMenuItem).

—SA
You''re almost there. MenuItem has the property MenuItems (as well as Menu). You only need to use MenuItem.MenuItems.Add(existingMenuItem).

—SA


尝试一下.
Try this.
MainMenu MMenu = new MainMenu();
     DataTable DT_Menu = GetDataTable();
     MenuItem MItem = new MenuItem();

     foreach (DataRow DR in DT_Menu.Rows)
     {
         if (Convert.ToBoolean(DR["M_Header"]) == true)
         {
             MItem = new MenuItem();
             MItem.Name = DR["M_Name"].ToString();
             MItem.Text = DR["M_Text"].ToString();
             MMenu.MenuItems.Add(MItem);
         }
         else
         {
             MenuItem MItemChild = new MenuItem();

             MItemChild.Name = DR["M_Name"].ToString();
             MItemChild.Text = DR["M_Text"].ToString();
             MMenu.MenuItems.Add(MItemChild);

         }
     }
     Menu = MMenu;
 }


感谢您的快速回复:)
但是我想我确实添加了项目菜单!
Thanks for your fast reply :)
but i think i did add the item menu!!!
ExistMnu.MenuItems.Add(CMItem)


这篇关于动态菜单和子菜单“按代码"在C#中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆