开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 14021|回复: 36

DevExpress 中根据数据库字典动态生成卡式菜单

[复制链接]

0

精华

418

贡献

346

赞扬

正版授权组

Rank: 14Rank: 14Rank: 14Rank: 14

帖子
213
软币
7131
在线时间
1173 小时
注册时间
2013-6-9
发表于 2013-11-4 17:14:37 | 显示全部楼层 |阅读模式
DevExpress  中根据数据库字典动态生成卡式菜单                         Posted on 2013-11-03 20:22 爱尚~为技术疯狂 阅读(593) 评论(3)  编辑 收藏                                                                  
最近在写HR系统用到的第三方的Devexpress套件因为要使用权限机制控制不同用户进入系统显示菜单所以要配合字典数据动态生成。在WEB中这种问题灰常的轻松在winform里就稍微有点不同为了用DEV实现卡式菜单有组的概念具体如图红色部分

提示:这里用了菜单头、菜单组、菜单项来逐级生成 ,首先是菜单头便利创建然后判断是否有菜单组如果有菜单组就先生成菜单组然后把菜单项加入菜单组最后为按钮注册事件,这里的事情用一个公用方法搞定即可

        /// <summary>        /// 动态加载菜单        /// </summary>        private void GetMenuBind()        {            //根据登录用户角色菜单动态创建            //循环创建卡菜单            DataTable baseModuleDT = BLL.BaseModule.GetDataTable("LevelNo=1", "");            for (int i = 0; i < baseModuleDT.Rows.Count; i++)            {                //创建卡                RibbonPage ribbonPage = new DevExpress.XtraBars.Ribbon.RibbonPage();//菜单卡对象定义                ribbonPage.Text = baseModuleDT.Rows["FullName"].ToString();                this.ribbon.Pages.Add(ribbonPage);                //获取组菜单                DataTable baseModuleDTG = BLL.BaseModule.GetDataTable("ParentId=" + baseModuleDT.Rows["Id"].ToString() + " and LevelNo=2", "");                if (baseModuleDTG.Rows.Count <= 0)                {                    //没有组                    RibbonPageGroup ribbonPageGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();//菜单卡分组定义                    ribbonPageGroup.Text = baseModuleDT.Rows["FullName"].ToString();//卡片组名                    ribbonPage.Groups.Add(ribbonPageGroup);                    DataTable baseModuleDTB = BLL.BaseModule.GetDataTable("ParentId=" + baseModuleDT.Rows["Id"].ToString() + " and LevelNo=3", "");                    for (int b = 0; b < baseModuleDTB.Rows.Count; b++)                    {                                                Image image = Image.FromFile(filePath + baseModuleDTB.Rows["MenuIco"].ToString());//获取文件                        //功能按钮                        BarButtonItem barButtonItem = new DevExpress.XtraBars.BarButtonItem();                        barButtonItem.Caption = baseModuleDTB.Rows["FullName"].ToString();                        barButtonItem.LargeGlyph = image;// global::MemberManager.Properties.Resources.group_key;                        barButtonItem.Name = baseModuleDTB.Rows["WinFrom"].ToString();                        barButtonItem.Tag = baseModuleDTB.Rows["WinFrom"].ToString().Substring(0, baseModuleDTB.Rows["WinFrom"].ToString().IndexOf('.'));//截取文件名点以前的                        ribbonPageGroup.ItemLinks.Add(barButtonItem);                        barButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.barButtonItem_ItemClick);//注册事件                    }                }                else                {                    for (int g = 0; g < baseModuleDTG.Rows.Count; g++)                    {                        //创建组                        RibbonPageGroup ribbonPageGroup = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();//菜单卡分组定义                        ribbonPageGroup.Text = baseModuleDTG.Rows[g]["FullName"].ToString();//卡片组名                        ribbonPage.Groups.Add(ribbonPageGroup);                        DataTable baseModuleDTB = BLL.BaseModule.GetDataTable("ParentId=" + baseModuleDTG.Rows[g]["Id"].ToString() + " and LevelNo=3", "");                        for (int b = 0; b < baseModuleDTB.Rows.Count; b++)                        {                            Image image = Image.FromFile(filePath + baseModuleDTB.Rows["MenuIco"].ToString());//获取文件                            //功能按钮                            BarButtonItem barButtonItem = new DevExpress.XtraBars.BarButtonItem();                            barButtonItem.Caption = baseModuleDTB.Rows["FullName"].ToString();                            barButtonItem.LargeGlyph = image;// global::MemberManager.Properties.Resources.group_key;                            barButtonItem.Name = baseModuleDTB.Rows["WinFrom"].ToString();                            //barButtonItem.Tag = baseModuleDTB.Rows["WinFrom"].ToString().Substring(0, baseModuleDTB.Rows["WinFrom"].ToString().IndexOf('.'));//截取文件名点以前的                            ribbonPageGroup.ItemLinks.Add(barButtonItem);                            barButtonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.barButtonItem_ItemClick);//注册事件                        }                                            }                }            }        }


动态调用事件如下:

        /// <summary>        /// 动态调出窗体事件 注:动态调用窗体名需和数据库中名称完全一致        /// </summary>        private void barButtonItem_ItemClick(object sender, ItemClickEventArgs e)        {                        if (!ShowChildrenForm(e.Item.Tag.ToString()))            {                if (this.MdiChildren.Length < childFormMaxNumber)                {                    DictItemUtil.AddLog("成功打开" + e.Item.Caption.ToString());                      Assembly asm = Assembly.Load("MemberManager");//程序集名                    object frmObj = asm.CreateInstance("MemberManager." + e.Item.Tag.ToString());//程序集+form的类名。                    Form childForm = (Form)frmObj;                    childForm.Tag = e.Item.Tag.ToString();  //tag属性要重新写一次,否则在第二次的时候取不到。原因还不清楚。有知道的望告知。                    childForm.MdiParent = this;                    childForm.Show();                }                else                    MessageUtil.ShowWarning(message);            }        }




评分

参与人数 9赞扬 +9 收起 理由
xiaosen666m + 1 感谢分享
582950562 + 1 赞一个
soar21 + 1 赞一个
842034066@qq.co + 1 赞一个
itmsn160 + 1 感谢分享

查看全部评分

回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
44
软币
334
在线时间
36 小时
注册时间
2013-10-18
发表于 2013-11-6 09:08:18 | 显示全部楼层
沙发,这么好的帖子不顶不行啊
回复

使用道具 举报

0

精华

317

贡献

26

赞扬

帖子
151
软币
3202
在线时间
740 小时
注册时间
2013-6-11
QQ
发表于 2013-11-6 13:48:33 | 显示全部楼层
wlpro 发表于 2013-11-6 09:08
沙发,这么好的帖子不顶不行啊

这个有用,标记一下.
回复

使用道具 举报

0

精华

275

贡献

2247

赞扬

正版授权组

Rank: 14Rank: 14Rank: 14Rank: 14

帖子
211
软币
7145
在线时间
633 小时
注册时间
2013-12-13
发表于 2013-12-14 12:00:05 | 显示全部楼层
哇,漂亮学习一下
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
9
软币
95
在线时间
1 小时
注册时间
2013-12-14
发表于 2013-12-14 21:56:59 | 显示全部楼层
这个是个非常好好好好啊啊
回复

使用道具 举报

0

精华

1

贡献

0

赞扬

帖子
104
软币
851
在线时间
118 小时
注册时间
2013-7-30
发表于 2013-12-25 09:32:41 | 显示全部楼层
代码比较乱、好难看懂
回复

使用道具 举报

0

精华

186

贡献

386

赞扬

帖子
246
软币
7892
在线时间
1875 小时
注册时间
2013-6-30
发表于 2013-12-25 12:45:03 | 显示全部楼层
有没有片段代码下载呢。
回复

使用道具 举报

0

精华

31

贡献

30

赞扬

帖子
54
软币
338
在线时间
39 小时
注册时间
2013-12-27
发表于 2014-1-1 16:25:48 | 显示全部楼层
看得我头昏眼花....
回复

使用道具 举报

0

精华

0

贡献

6

赞扬

帖子
37
软币
287
在线时间
28 小时
注册时间
2013-11-19
发表于 2014-1-12 00:00:34 | 显示全部楼层
哇,漂亮学习一下
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
19
软币
189
在线时间
14 小时
注册时间
2014-3-8
QQ
发表于 2014-3-28 16:34:48 | 显示全部楼层
正好,我也在做類似的功能=.=
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
3
软币
83
在线时间
0 小时
注册时间
2014-4-4
发表于 2014-4-4 23:53:08 | 显示全部楼层
看得我头昏眼花....
回复

使用道具 举报

0

精华

451

贡献

5269

赞扬

帖子
324
软币
20023
在线时间
1773 小时
注册时间
2013-6-8

胡吹海聊

发表于 2014-4-26 09:50:35 | 显示全部楼层
这个不错,最好有少许实例代码下载更加不错
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
19
软币
189
在线时间
14 小时
注册时间
2014-3-8
QQ
发表于 2014-5-5 12:02:52 | 显示全部楼层
阳光海岸 发表于 2014-4-26 09:50
这个不错,最好有少许实例代码下载更加不错

学习了,多谢分享
回复

使用道具 举报

0

精华

2

贡献

0

赞扬

帖子
23
软币
149
在线时间
10 小时
注册时间
2014-5-22
发表于 2014-5-22 23:13:23 | 显示全部楼层
这个有用,标记一下
回复

使用道具 举报

0

精华

-4

贡献

21

赞扬

帖子
55
软币
344
在线时间
33 小时
注册时间
2014-5-23
发表于 2014-6-3 15:01:57 | 显示全部楼层
数据库表结构啊,这怎么看。。。。。
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
19
软币
129
在线时间
14 小时
注册时间
2015-1-11
发表于 2015-3-14 08:35:25 | 显示全部楼层
不错 谢谢分享啊
回复

使用道具 举报

0

精华

2887

贡献

2013

赞扬

正版授权组

Rank: 14Rank: 14Rank: 14Rank: 14

帖子
200
软币
12169
在线时间
2021 小时
注册时间
2013-6-22

胡吹海聊神经正常

发表于 2015-3-14 09:50:14 | 显示全部楼层
没有时间来测试楼主的代码,先记下了。
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
30
软币
145
在线时间
7 小时
注册时间
2015-3-21
发表于 2015-3-23 11:44:00 | 显示全部楼层
能提供下载吗,看的头晕脑胀
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
21
软币
111
在线时间
3 小时
注册时间
2015-5-28
发表于 2015-5-28 23:30:02 | 显示全部楼层
果然好程序,我是新来的帮忙顶起来
回复

使用道具 举报

0

精华

160

贡献

2005

赞扬

帖子
698
软币
8864
在线时间
1078 小时
注册时间
2013-8-1
发表于 2015-6-19 14:05:58 | 显示全部楼层
虽然不用,但是谢谢分享。
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
29
软币
167
在线时间
25 小时
注册时间
2015-7-31
发表于 2015-8-9 05:27:57 | 显示全部楼层
哇,漂亮学习一下源码有没没有
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
24
软币
124
在线时间
6 小时
注册时间
2013-10-30
发表于 2015-8-21 22:20:47 | 显示全部楼层
好东东,相当好的东西,谢谢了。
回复

使用道具 举报

0

精华

129

贡献

52

赞扬

帖子
247
软币
1806
在线时间
193 小时
注册时间
2014-5-13
发表于 2015-9-25 09:49:23 | 显示全部楼层
格式没法看,头晕
回复

使用道具 举报

0

精华

120

贡献

73

赞扬

帖子
106
软币
266
在线时间
16 小时
注册时间
2015-10-16
发表于 2015-10-28 10:44:01 | 显示全部楼层
不错,学习了
回复

使用道具 举报

0

精华

1

贡献

0

赞扬

帖子
30
软币
196
在线时间
20 小时
注册时间
2015-9-7
发表于 2015-11-24 14:29:49 | 显示全部楼层
看起来很不错啊,暂时没时间看,标记一下
回复

使用道具 举报

0

精华

0

贡献

17

赞扬

帖子
57
软币
526
在线时间
38 小时
注册时间
2015-5-5
发表于 2015-12-12 15:45:51 | 显示全部楼层
hfzengzhen 发表于 2015-11-24 14:29
看起来很不错啊,暂时没时间看,标记一下

可否下载代码
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
17
软币
122
在线时间
7 小时
注册时间
2016-5-9
发表于 2016-5-18 00:12:47 | 显示全部楼层
沙发,这么好的帖子不顶不行啊
回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-3-29 17:20

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表