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


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

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

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

    GridViewMenuHelper.CreateCopyCellItem(gdvw);

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

    效果图如下:

    DevExpress XtraGridControl

    实现代码如下:

    #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("
    ","")),
                   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中文网! 扫描关注DevExpress中文网微信公众号,及时获取最新动态及最新资讯
    DevExpress中文网微信
  • 相关阅读:
    疑问:关于strcmp()以及此指针表现形式*(char * *)a
    后置操作符
    php学习笔记(一)
    windows php环境配置
    关于wifi破解那点事
    C++使用大漠插件及截图
    跨平台网络编程
    reinterpret_cast, static_cast , dynamic_cast ,const_cast 的总结
    初识按键精灵
    python 程序打包-----py2exe
  • 原文地址:https://www.cnblogs.com/AABBbaby/p/8440872.html
Copyright © 2020-2023  润新知