DevExpress 动态配置菜单 - 反射获取按钮类型,数据库中直接填写控件名称(如:BarButtonItem)

24 篇文章 1 订阅
try
{
    var lisSub = lstMenu.Where(t => t.OwnerID == 0 && t.ProID == Loginer.CurrentUser.ProductID).ToList();
    if (lisSub.Count() > 0)
    {
        foreach (sys_menu item in lisSub)
        {

            RibbonPage rbplevel_1 = new RibbonPage();
            rbplevel_1.Name = item.memuID.ToString();
            rbplevel_1.Text = item.memuName;

            var groupList = BllMenu.GetListByWhere(t => t.ProID == Loginer.CurrentUser.ProductID && t.IsMenu != 1 && t.OwnerID == item.memuID).ToList();

            for (int i = 0; i < groupList.Count; i++)
            {
                RibbonPageGroup rdpRibbonPageGroup = new RibbonPageGroup();

                rdpRibbonPageGroup.Name = "rpgGroup" + groupList[i].memuID.ToString();
                rdpRibbonPageGroup.Text = groupList[i].memuName.ToString();

                rbplevel_1.Groups.Add(rdpRibbonPageGroup);


            }

            this.ribbon.Pages.Add(rbplevel_1);

            for (int i = 0; i < groupList.Count; i++)
            {
                CreateSubMenu(rbplevel_1, lstMenu, groupList[i].memuID, i);

            }

        }
    }
}
catch (Exception ex)
{
    System.Diagnostics.Debug.Assert(false, ex.Message);
}

void CreateSubMenu(RibbonPage rbpPate, List<sys_menu> lstMenu, int ownerID , int groupIdx)
{
    try
    {
        var lisSub = lstMenu.Where(t => t.OwnerID == ownerID && t.MenuGroupID == ownerID).OrderBy(t => t.MenuOrder).ToList(); //菜单可能 不需要全部初始化,所以需要等级过滤
        if (lisSub.Count() > 0)
        {
            foreach (sys_menu item in lisSub)
            {
                Assembly a = Assembly.LoadFrom(rbpPate.GetType().Assembly.Location);

                if (!item.menuType.IsEmpty())
                {
                    try
                    {
                        dynamic rbpButton = Activator.CreateInstance(a.GetExportedTypes().First(t => t.Name == item.menuType));

                        rbpButton.Caption = item.memuName;
                        rbpButton.Id = item.memuID;

                        rbpButton.LargeGlyph = BaseOper.LoadResourcesImage(item.ImageName) != null ? BaseOper.LoadResourcesImage(item.ImageName) : global::Intesim.eManager.Properties.Resources._25;
                        rbpButton.Name = "rbpButton" + item.memuID.ToString();
                        rbpButton.Tag = item;
                        //rbpButton.Links[0].BeginGroup = true; //分隔线
                        if (lisSub.Count == 1) rbpButton.LargeWidth = 80;

                        rbpButton.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.ribbon_rbpMenu_ItemClick);
                        //rbpButton.ItemClick += (s, arg) => { this.ribbon_rbpMenu_ItemClick(rbpButton, null); };//匿名委托传值

                        rbpPate.Groups[groupIdx].ItemLinks.Add(rbpButton);
                        CreateSubMenu(rbpPate, lisSub, item.memuID, groupIdx);
                    }
                    catch(Exception e)
                    {
                        System.Diagnostics.Debug.Assert(false, e.Message);
                    }
                }
            }
        }
    }
    catch (Exception ex)
    {
        System.Diagnostics.Debug.Assert(false, ex.Message);
    }
}

private void ribbon_rbpMenu_ItemClick(object sender, ItemClickEventArgs e)
{

    //BarButtonItem rButton = sender as BarButtonItem;
    sys_menu sm = e.Item.Tag as sys_menu;
    if (sm.memuID==0)
    {
        
    }
    else
    {
        try //openwindows
        {


            if (sm!=null && sm.DllName.IsNotEmptyTrim())
            {
                MdiTools.OpenTopForm(this, sm.DllName, sm.WinName, null);
            }
            else
            {
                Msg.ShowError("菜单未配置功能,请与管理员联系!");
            }



        }
        catch (Exception)
        {

            throw;
        }
    }



}

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值