第三方的Devexpress套件因为要使用权限机制控制不同用户进入系统显示菜单所以要配合字典数据动态生成。在WEB中这种问题灰常的轻松在winform里就稍微有点不同为了用DEV实现卡式菜单有组的概念具体如图红色部分

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

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

DevExpress 中根据数据库字典动态生成卡式菜单 z的更多相关文章

  1. 根据数据库记录动态生成C#类及其公共属性并动态执行的解决方案

    原文:根据数据库记录动态生成C#类及其公共属性并动态执行的解决方案 问题: C#中,想动态产生这么一个类: public class StatisticsData    {        public ...

  2. js—input框中输入数字,动态生成内容的方法

    项目中需要在前端实现: 用户输入数字n,动态生成n个元素,删除n,自动清空n个元素(如图一): 用户输入数字n,失焦生成n个元素,再聚焦修改n,自动清空n个元素(如图二): 图一: 图二: 需求一实现 ...

  3. PHP 使用程序进行数据库字典文件生成 导出数据库字典

    作为一个程序员肯定是不愿意写文档的!!! 尤其最麻烦的数据库字典文档 所以偷懒写了一个PHP程序来进行数据库字典导出 记录一下  以免以后忘记 //使用的是Laravel框架 可以转换成原生导出$ta ...

  4. 巨蟒django之权限7:动态生成一级&&二级菜单

    内容回顾: . 权限的控制 . 表结构设计 存权限的信息 用户表 - name 用户名 - pwd 密码 - roles 多对多 角色表 - name - permissions 多对多 权限表 - ...

  5. 根据数据库内容动态生成html页面

    之前使用了很多方法,但是都很复杂. 项目里包括了数据库的管理页面,对数据库进行修改(新增,插入,删除)等之后,在另一个页面使用. 使用时采用按下相应label弹出所有信息的方法,以html的形式将数据 ...

  6. PowerDesigner中利用数据库表反向生成PDM(jdk必须是32位)

    第一步:创建一个空的PDM模型(选择对应的DBMS):File-->New 第二步:选择DataBase-->Configure Connections,配置即将连接的数据库 第三步:选择 ...

  7. 将android程序中的数据库导出到SD卡

    private void copyDBToSDcrad() { String DATABASE_NAME = "数据库文件名"; String oldPath = "da ...

  8. 在后台代码中动态生成pivot项并设置EventTrigger和Action的绑定

    最近在做今日头条WP的过程中,遇到需要动态生成Pivot项的问题.第一个版本是把几个频道写死在xaml里了,事件绑定也写在xaml里,每个频道绑定一个ObservableCollection<A ...

  9. 数据库表反向生成(一) MyBatis-generator与IDEA的集成

    在Dao层,通过数据库表反向生成,可以节省我们很多的精力,把更多的精力投入复杂的业务中. 数据库表反向生成,指的是通过数据库如mysql中的库表schema生成dao层读写表的基础代码,包括model ...

随机推荐

  1. VisualSvn+TortoiseSVN的安装说明

    一.VisualSvn安装及简单使用 下载VisualSvn:VisualSVN-Server-2.5.5.msi 系统:Win7系统 安装步骤: 1.下载VisualSVN-Server-2.5.5 ...

  2. SpringMVC学习总结(五)——SpringMVC文件上传例子

    这是用的是SpringMVC-3.1.1.commons-fileupload-1.2.2和io-2.0.1 首先是web.xml <?xml version="1.0" e ...

  3. linux命令-shopt

    shopt命令 shopt命令用于显示和设置shell中的行为选项,通过这些选项以增强shell易用性.shopt命令若不带任何参数选项,则可以显示所有可以设置的shell操作选项. 开启与关闭 开启 ...

  4. Unified Emoji表情for Android

    这个是我做Android以来碰到的最烦的东西,该死的emoji表情,恨之入骨..无奈这个问题分配给我了.我也只能硬着头皮做. 0.吐个槽先 首先,你要明白什么是emoji表情,不知道的google,不 ...

  5. 机器学习 —— 概率图模型(Homework: Representation)

    前两周的作业主要是关于Factor以及有向图的构造,但是概率图模型中还有一种更强大的武器——双向图(无向图.Markov Network).与有向图不同,双向图可以描述两个var之间相互作用以及联系. ...

  6. JS模块化编程

    AMD:异步模块定义,适合客户端环境,不会阻塞运行.客户端受网络影响比较大. CommonJs:适用于服务器端规范,可以同步加载,只受硬盘读写的影响.

  7. POJ 3185 The Water Bowls(高斯消元-枚举变元个数)

    题目链接:http://poj.org/problem?id=3185 题意:20盏灯排成一排.操作第i盏灯的时候,i-1和i+1盏灯的状态均会改变.给定初始状态,问最少操作多少盏灯使得所有灯的状态最 ...

  8. [POJ2377]Bad Cowtractors(最大生成树,Kruskal)

    题目链接:http://poj.org/problem?id=2377 于是就找了一道最大生成树的AC了一下,注意不连通的情况啊,WA了一次. /* ━━━━━┒ギリギリ♂ eye! ┓┏┓┏┓┃キリ ...

  9. MyBatis学习总结3-优化MyBatis配置文件

    连接数据库配置优化 可以将数据库连接配置信息卸载conf.xml中,但是为了优化连接,专门写一个properties用于存数据库连接信息,然后在conf.xml中进行引用,里面包括数据库驱动,地址,用 ...

  10. 2014年百度之星程序设计大赛 - 初赛(第一轮) hdu Grids (卡特兰数 大数除法取余 扩展gcd)

    题目链接 分析:打表以后就能发现时卡特兰数, 但是有除法取余. f[i] = f[i-1]*(4*i - 2)/(i+1); 看了一下网上的题解,照着题解写了下面的代码,不过还是不明白,为什么用扩展g ...