在使用GridControl的时候经常需要添加右键菜单。

一般的做法是自己创建菜单项,然后注册GridView的Mouse-Click事件,然后Show出定义好的菜单。

但是涉及到一些单击事件会收到编辑器编辑状态影响,所以Mouse-Click事件不好用。

幸好,GridView自带了一个默认的右键事件,专门用于弹出右键菜单用:PopupMenuShowing

为了调用方便,设计成一个静态方法,调用的时候只用传入需要注册的网格就好:

GridViewMenuHelper.CreateCopyCellItem(gdvw);

这里,为传入网格添加一个名为【复制XXX】(XXX为列头)的方法,可以将鼠标点中的Cell中的数据复制到剪贴板。

效果图如下:

实现代码如下:

#region 添加复制Cell菜单
public static void CreateCopyCellItem(GridView View)
{
View.PopupMenuShowing += new PopupMenuShowingEventHandler(Create_CopyCellItem);
} static void Create_CopyCellItem(object sender, PopupMenuShowingEventArgs e)
{
if (e.MenuType == DevExpress.XtraGrid.Views.Grid.GridMenuType.Row)
{
if (e.HitInfo.InRowCell)
{
e.Menu.Items.Add(CreateCopyMenuItem((GridView)sender, e.HitInfo.RowHandle, e.HitInfo.Column));
}
}
} static DXMenuItem CreateCopyMenuItem(GridView view, int rowHandle, GridColumn column)
{
DXMenuItem copyitem = new DXMenuItem("复制" + column.Caption,
new EventHandler(OnCopyCellClick), null);
copyitem.Tag = column;
return copyitem; } static void OnCopyCellClick(object sender, EventArgs e)
{
GridColumn col = (GridColumn)((DXMenuItem)sender).Tag;
string filed = col.FieldName;
Clipboard.SetDataObject(col.View.GetRowCellDisplayText(col.View.FocusedRowHandle, col), true);
}
#endregion

补充:

public class GridViewAddPopupMenuBase
{ EventHandler OnClearCellClick;
string MenuName; public static void CreateNewCellItem(GridView View, string cMenuName, EventHandler DoClearCellClick)
{
GridViewAddPopupMenuBase gb = new GridViewAddPopupMenuBase();
gb.OnClearCellClick = DoClearCellClick;
gb.MenuName = cMenuName; View.PopupMenuShowing += new PopupMenuShowingEventHandler(gb.Create_NewCellItem);
}
void Create_NewCellItem(object sender, PopupMenuShowingEventArgs e)
{
if (e.MenuType == DevExpress.XtraGrid.Views.Grid.GridMenuType.Row)
{
if (((GridView)sender).OptionsBehavior.Editable == true)
{
if (e.HitInfo.InRowCell && e.HitInfo.Column.OptionsColumn.AllowEdit == true)
{
e.Menu.Items.Add(CreateNewMenuItem((GridView)sender, e.HitInfo.RowHandle, e.HitInfo.Column));
}
}
}
} DXMenuItem CreateNewMenuItem(GridView view, int rowHandle, GridColumn column)
{
DXMenuItem copyitem = new DXMenuItem(MenuName.Replace("[Caption]", column.Caption.Replace("\r\n","")),
new EventHandler(OnClearCellClick), null);
copyitem.Tag = column;
return copyitem; } }
public class GridViewCreateNewCellItem : GridViewAddPopupMenuBase
{
#region 添加复制Cell菜单
public static void CreateClearCellItem(GridView View)
{
CreateNewCellItem(View, "清除[Caption]", DoClear);
} private static void DoClear(object sender, EventArgs e)
{
GridColumn col = (GridColumn)((DXMenuItem)sender).Tag;
col.View.SetRowCellValue(col.View.FocusedRowHandle, col, DBNull.Value);
} #endregion
}

使用:
Load事件增加

GridViewCreateNewCellItem.CreateClearCellItem(gv_Wool);
GridViewCreateNewCellItem.CreateClearCellItem(gv_Ast);
GridViewCreateNewCellItem.CreateClearCellItem(gv_ZJ);
GridViewCreateNewCellItem.CreateClearCellItem(gv_Process2);
GridViewCreateNewCellItem.CreateClearCellItem(gv_SpecialProcess);

Demo下载:http://pan.baidu.com/s/1bnCijtP

DevExpress实用心得:XtraGridControl动态添加右键菜的更多相关文章

  1. DevExpress使用教程:XtraGridControl动态添加右键菜单

    在使用 GridControl 的时候经常需要添加右键菜单.一般的做法是自己创建菜单项,然后注册GridView的Mouse-Click事件,然后Show出定义好的菜单.但是涉及到一些单击事件会收到编 ...

  2. 通过jquery来实现文本框和下拉框动态添加效果,能根据自己的需求来自定义最多允许添加数量,实用的jquery动态添加文本框特效

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. EasyUI datagrid添加右键菜单项

    js代码 //动态加载数据表格 function InitData() { $('#grid').datagrid({ url: '/Home/Query?r=' + Math.random(), / ...

  4. 初识Devexpress ChartControl 之 动态添加stepline及TextAnnotation

    最近在用devexpress 第三方软件做项目. devexpress 的控件使用简单.功能强大.类型丰富.界面优美.扩展性强.今天主要是动态生成了一条StepLine.生成后的效果(能力不强,所以做 ...

  5. 将Sublime Text3添加到右键菜单中

    卸载了Sublime Text2,安装了最新版本的Sublime Text3,不过一直不在右键菜单中,每次使用都需要从打开方式中选,所以决定添加,有如下2种方法. 添加到右键菜单 方法一(推荐) 在S ...

  6. 将程序sublime添加到右键菜单中

    新建wangzhaobo.bat复制一下代码, 粘贴保存,然后打开. @echo Off :START CLS echo *====================================== ...

  7. 关于devexpress报表XtraReport,动态修改报表样式(.repx格式),动态添加数据并使用的理解

    一.基本概念: XtraReports 中的每个报表都由 XtraRepot 类的一个实例表示,或者由该类的子类来表示(这种情况更常见). 因此,每个报表都作为带区的容器使用,而每个带区中都包含报表控 ...

  8. MFC 单文档中动态添加菜单项和响应菜单事件

    新建一个单文档程序 在查看菜单项中增加两个子菜单,分别为隐藏工具栏(ID_HIDE),新建菜单(ID_NEWMENU) 在Resource.h中增加一个ID_NEWMENU宏 #define ID_N ...

  9. JAVAEE——BOS物流项目02:学习计划、动态添加选项卡、ztree、项目底层代码构建

    1 学习计划 1.jQuery easyUI中动态添加选项卡 2.jquery ztree插件使用 n 下载ztree n 基于标准json数据构造ztree n 基于简单json数据构造ztree( ...

随机推荐

  1. hdu 2871 Memory Control(线段树)

    题目链接:hdu 2871 Memory Control 题目大意:模拟一个内存分配机制. Reset:重置,释放全部空间 New x:申请内存为x的空间,输出左地址 Free x:释放地址x所在的内 ...

  2. 关于汉诺塔,C++代码,代码效果演算

     1.故事介绍 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上依照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘 ...

  3. 如何从一个1G的文件中找到你所需要的东西

    如何从一个1G的文件中找到你所需要的东西,这个问题貌似面试的时候会经常问到.不过不论你用什么语言,肯定逃脱不了按指针读或者按块读. 这里介绍python的用法.本人亲自实验了,速度还可以. 如果你的文 ...

  4. asp.net core mvc视频A:笔记3-5.视图数据共享之TempData

    前几节讲的都是单页面数据共享,从本节开始讲跨页面数据共享 创建项目3.5,新建控制器 代码 控制器 设置TempData 另一个视图中读取TempData数据 运行 此时如果刷新页面,页面中的内容“张 ...

  5. MQTT--topic

    1.topic  定阅与发布必须要有主题,只有当定阅了某个主题后,才能收到相应主题的payload,才能进行通信. 2. 主题层级分隔符—“/”  主题层级分隔符使得主题名结构化.如果存在分隔符,它将 ...

  6. oracle中建同名

    create synonym TD_B_REDIS_COUNT for ucr_param.TD_B_REDIS_COUNT;grant DELETE,UPDATE,INSERT,SELECT on ...

  7. Ionic项目打包安卓APK

    之前用Ionic+Angular做了几个小应用Demo,现在用其中一个做实验试下打包安卓的APK安装包.(备注:我用的应用demo是之前博客里写的汇率的Demo,不清楚的同学可以查哈~) 我是用ion ...

  8. do{}while(0)与CC_BREAK_IF的绝妙搭配

    从一開始认为没有必要,到认为很好用.我经历了大概两个月的时间,以下来总结一下什么情况下使用这样的结构吧. 第一种情况:当载入文件的时候,假设载入文件失败,须要报错的时候. 当前,能够用try{}cat ...

  9. springmvc上传方法

    /** * * @param file 上传的文件 * @param filePath 上传到那个目录 * @return 上传后的文件名字 * @throws IOException */ publ ...

  10. 【转】python做一个http接口测试框架

    出处: https://my.oschina.net/bysu/blog/751634 https://my.oschina.net/u/3041656/blog/820023