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 
posted @ 2012-10-24 15:15  葡萄天花板  阅读(1735)  评论(2编辑  收藏  举报