首页 新闻 会员 周边 捐助

如何禁掉DevExpress gridview中表头(列标题)右键菜单的列选择功能

1
悬赏园豆:20 [已解决问题] 解决于 2014-08-05 10:33

不知道你们有没有遇到过这个问题,在DevExpress gridview中的表头右键菜单里有个列能:

这个特别烦人,因为他可以查看到隐藏的列,并且拖出来,我就想禁掉这个功能,但是又不想禁掉这整个菜单,因为这里的其他功能还是很好用的,我之前写过一个随笔DevExpress gridView列标题右键菜单管理可以解决,但是我又嫌太麻烦,想知道有没有什么属性可以直接让它不出现,不用写事件那么麻烦。

问题补充:

或者让隐藏的列不会被选择出来也行

izan的主页 izan | 菜鸟二级 | 园豆:205
提问于:2014-08-04 19:30
< >
分享
最佳答案
0

当然不用写事件了。你这样不看控件的属性,你女朋友造吗?

在Gridview的Optionmenu里面,有个属性叫“EnableColumnMenu”,

 

好吧,为了负责任,我慎重地打开了我的VS,再看了一下,

如果想要显示ContextMenu,却只是不想要出现Column Chooser,方法是:

在Gridview的OptionCustomization里面,有个属性叫"AllowColumnMoving",

把这个关闭,就不会显示Column Chooser的菜单了。

收获园豆:20
爱编程的大叔 | 高人七级 |园豆:30844 | 2014-08-05 09:54

额...非常感谢你的回答,不过.....这个我试过,但是,我想保留可以移动列的效果,这个还是不符合我的心意

izan | 园豆:205 (菜鸟二级) | 2014-08-05 10:07

是我漏了说这个,没说清楚,还是很谢谢你的帮助,给你10分

izan | 园豆:205 (菜鸟二级) | 2014-08-05 10:10

@izan: 

看出来你也是个对细节很认真的。

说下我的看法吧,对GridView我有两种区别对待,

1、在查询中的,允许列移动,允许显示隐藏列。

2、在编辑窗口中,作为明细窗口,供用户录入数据的,不允许列移动,不允许隐藏列。

查询中,我从来不用隐藏字段,因为不需要。因为数据绑定,如果需要在点击某行时,根据某个不显示字段的值进行判断或处理的话,我会到对象行里面去判断,而不需要通过GridView的列字段来判断。

而在编辑窗口上,需要一个隐藏字段,用于控制排序。顺便说一下,编辑窗口是强制不让Sorting的。

That is all.

爱编程的大叔 | 园豆:30844 (高人七级) | 2014-08-05 10:11

@爱编程的大叔: 这个是没办法的办法,但是在效果上不能满足需求,因为查询出的隐藏列,是给程序员用的,不是给客户看的,所以要彻底隐藏,不允许客户看这个,从客户角度,这是无用信息

izan | 园豆:205 (菜鸟二级) | 2014-08-05 10:17

@izan: 

你要这么说的话,真只能去收购DevExpress公司了。

从我的角度看,这样几个不同角度的自定义差不多够用了。

至于你说的隐藏列给程序员用,我都是用我的解决方案,就是从绑定的对象读取,非常好用,而且从性能上来说(其实不差那几MS)来说,可以少几个column的内存占用,哈哈。

爱编程的大叔 | 园豆:30844 (高人七级) | 2014-08-05 10:22

@爱编程的大叔: 不错的想法,谢谢你的意见,想了想,觉得这个控件应该是封装了一个调用绘制菜单控件的方法,要想从属性上去一句话解决估计是不可能了。

izan | 园豆:205 (菜鸟二级) | 2014-08-05 10:31

@izan: 

在数据绑定后,把不要的列删掉。

例如,你有一个列绑定的字段名为 A,在绑定后把该列删掉即可。

TreeListColumn tcA = treeList1.Columns.ColumnByFieldName("A");
if(tcA !=null)
treeList1.Columns.Remove(tcA );

AlonChan | 园豆:202 (菜鸟二级) | 2016-03-25 02:01

@AlonChan: 

GridView.PopupMenuShowing += GridView_PopupMenuShowing;

在这个事件里你可以定制你的菜单,可以添加、删除菜单。

AlonChan | 园豆:202 (菜鸟二级) | 2016-04-23 00:24
其他回答(1)
0

在数据绑定后,把不要的列删掉。

例如,你有一个列绑定的字段名为 A,在绑定后把该列删掉即可。

TreeListColumn tcA = treeList1.Columns.ColumnByFieldName("A");
if(tcA !=null)
treeList1.Columns.Remove(tcA );

AlonChan | 园豆:202 (菜鸟二级) | 2016-03-25 01:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册