轉(zhuǎn)帖|使用教程|編輯:我只采一朵|2014-11-04 14:17:34.000|閱讀 8955 次
概述:本文介紹如何在DevExpress XtraGridControl 中動態(tài)添加右鍵菜單。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
在使用 GridControl 的時候經(jīng)常需要添加右鍵菜單。一般的做法是自己創(chuàng)建菜單項,然后注冊GridView的Mouse-Click事件,然后Show出定義好的菜單。但是涉及到一些單擊事件會收到編輯器編輯狀態(tài)影響,所以Mouse-Click事件不好用。
幸好,GridView自帶了一個默認的右鍵事件,專門用于彈出右鍵菜單用:PopupMenuShowing
為了調(diào)用方便,設(shè)計成一個靜態(tài)方法,調(diào)用的時候只用傳入需要注冊的網(wǎng)格就好:
GridViewMenuHelper.CreateCopyCellItem(gdvw);
這里,為傳入網(wǎng)格添加一個名為【復制XXX】(XXX為列頭)的方法,可以將鼠標點中的Cell中的數(shù)據(jù)復制到剪貼板。
效果圖如下:

實現(xiàn)代碼如下:
#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下載://pan.baidu.com/s/1bnCijtP
Via GarsonZhang
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@ke049m.cn