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

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

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

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

GridViewMenuHelper.CreateCopyCellItem(gdvw);

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

效果图如下:

DevExpress XtraGridControl

实现代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#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

补充:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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事件增加

1
2
3
4
5
GridViewCreateNewCellItem.CreateClearCellItem(gv_Wool);
GridViewCreateNewCellItem.CreateClearCellItem(gv_Ast);
GridViewCreateNewCellItem.CreateClearCellItem(gv_ZJ);
GridViewCreateNewCellItem.CreateClearCellItem(gv_Process2);
GridViewCreateNewCellItem.CreateClearCellItem(gv_SpecialProcess);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值