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);
發佈了22 篇原創文章 · 獲贊 11 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章