DevExpress使用教程:XtraGridControl动态添加右键菜单
在使用 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
Via GarsonZhang

===============================================================

DevExpress使用教程:XtraGridControl动态添加右键菜单的更多相关文章
- DevExpress实用心得:XtraGridControl动态添加右键菜
在使用GridControl的时候经常需要添加右键菜单. 一般的做法是自己创建菜单项,然后注册GridView的Mouse-Click事件,然后Show出定义好的菜单. 但是涉及到一些单击事件会收到编 ...
- pyqt5-为QListWidget添加右键菜单
如何在pyqt5下为QListWidget添加右键菜单? 能百度到的均是pyqt4下的,有些貌似并不好用. 在尝试了很多方法后,下面贴出可用的方法: from PyQt4 import QtCore, ...
- 添加右键菜单命令 在此处打开命令窗口(E)(带图标)
@color 0A @title 添加右键菜单命令 在此处打开命令窗口(^&E)(带图标) by wjshan0808 @echo off reg add HKCR\Directory\Bac ...
- 仅在TabControl中的Tab中添加右键菜单
若想实现仅在TabControl中的Tab中添加右键菜单,可在XAML中通过使用样式得到: <TabControl> <TabControl.ItemContainerStyle&g ...
- [cb] Unity Editor 添加右键菜单
需求 为Unity的Editor窗口添加右键菜单 实现代码 // This example shows how to create a context menu inside a custom Edi ...
- Arcengine 二次开发添加右键菜单
最近在搞arcengine 二次开发,遇到了好多问题,也通过网上查资料试着慢慢解决了,把解决的步骤记录下来,有需要帮助的可以看一下,也欢迎各位来批评指正. 想给自己的map application在图 ...
- Beyond Compare 3添加右键菜单
目前是在Beyond Compare 3.1.9版本上试验可行,其他版本上尚未测试. 添加右键菜单步骤: 1.新建为.bat后缀的文本,将下面“添加右键菜单批处理”复制到此文本中. 2.将批处理移动到 ...
- 给tkinter文本框添加右键菜单
给tkinter文本框添加右键菜单 需求:直接右键点击使用tkinter创建的文本框是不会弹出菜单的.我们需要实现右键点击tkinter框架下的Entry对象.Text对象后弹出右键菜单可复制.粘贴和 ...
- 『实践』百度地图给map添加右键菜单(判断是否为marker)
var map; var s;//经度 var w;//纬度 $(document).ready(function(){ $(".mune").load("jsp/c ...
随机推荐
- HDU 2089 不要62(数位dp模板题)
http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意:求区间内不包含4和连续62的数的个数. 思路: 简单的数位dp模板题.给大家推荐一个好的讲解博客.h ...
- 51nod 1445 变色DNA(最短路变形)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1445 题意: 思路: 挺好的一道题目,如果$colormap[i][j] ...
- UVa 10954 全部相加(Huffman编码)
https://vjudge.net/problem/UVA-10954 题意:有n个数的集合S,每次可以从S中删除两个数,然后把它们的和放回集合,直到剩下一个数.每次操作的开销等于删除的两个数之和, ...
- UVa 1590 IP网络(简单位运算)
Description Alex is administrator of IP networks. His clients have a bunch of individual IP addres ...
- 转载:Nginx负载均衡的5种策略
nginx可以根据客户端IP进行负载均衡,在upstream里设置ip_hash,就可以针对同一个C类地址段中的客户端选择同一个后端服务器,除非那个后端服务器宕了才会换一个. nginx的upstre ...
- Qt5.3.2(VS2010)_调试_查看变量值
1.菜单栏 -->控件(W) --> 视图 2.在"Debug"状态下,选择一个变量(或者 按住左键 选择变量及其属性/方法)--> 右键 --> 添加表达 ...
- Qt5.3.2_Oracle驱动
参考网址:http://blog.csdn.net/sdqyhn/article/details/39855847 ZC: 将编译好的 qsqloci.dll和qsqlocid.dll 放到 目录“E ...
- [原][osg][osgEarth][粒子特效]关于粒子特效库在osgEarth中,位置摆放问题,跟踪节点移动问题
首先粒子在地球上位置摆放很简单: //传入的经纬度坐标 osg::Vec3d geoPoint; const SpatialReference* latLong = SpatialReference: ...
- 《剑指offer》第七题(重要!重建二叉树)
文件一:main.cpp // 面试题:重建二叉树 // 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输 // 入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历 ...
- 最大交换 Maximum Swap
2018-07-28 16:52:20 问题描述: 问题求解: 使用bucket数组来记录每个数最后出现的位置,然后从左向右遍历一遍即可. public int maximumSwap(int num ...