Sorting extjs 4如何更改网格上显示的列下拉列表的顺序

Sorting extjs 4如何更改网格上显示的列下拉列表的顺序,sorting,grid,extjs4,gridpanel,datagridviewcolumn,Sorting,Grid,Extjs4,Gridpanel,Datagridviewcolumn,使用ExtJS4.1.1 我有一个网格,有许多列>20 最初,这些列中的大多数是隐藏的 如果用户想要取消隐藏该列,他们选择任何列上的菜单,然后选择“列”选项,这将扩展另一个显示所有列的下拉列表/下拉列表。将显示旁边带有复选框的复选框 我的问题是: 下拉列表中的列按它们在网格中定义/显示的顺序显示。选择它们在网格中的显示顺序是有充分理由的(例如,id作为第一列)。但是,当用户想要显示其中一个隐藏列时,他们很难在列表中找到它。这是因为列表是按照列的定义顺序排序的。我想按字母顺序对列下拉列表/下拉列表

使用ExtJS4.1.1 我有一个网格,有许多列>20

最初,这些列中的大多数是隐藏的

如果用户想要取消隐藏该列,他们选择任何列上的菜单,然后选择“列”选项,这将扩展另一个显示所有列的下拉列表/下拉列表。将显示旁边带有复选框的复选框

我的问题是: 下拉列表中的列按它们在网格中定义/显示的顺序显示。选择它们在网格中的显示顺序是有充分理由的(例如,id作为第一列)。但是,当用户想要显示其中一个隐藏列时,他们很难在列表中找到它。这是因为列表是按照列的定义顺序排序的。我想按字母顺序对列下拉列表/下拉列表进行排序,而不影响网格中列的顺序


这是怎么做到的?

我想我找到了你问题的答案

首先,我没有ExtJS4.1.1。框架。所以我试图找出你在阅读ExtJS4.1.3时遇到的问题。Sencha网站上提供的文件。但我不认为他们在这两个小版本之间对框架的这一部分做了重大更改,所以我的解决方案也应该适用于您的情况。 我已经使用JSFIDLE尝试了我的解决方案。不幸的是,他们没有4.1.1。ext-all.css文件,所以我手动链接了Sencha上的4.0.2文件,所以菜单看起来有点错位

标题菜单及其子菜单由Ext.grid.header.Container类管理。列子菜单由该方法构造。每次拖放或其他应影响网格视图的事件时,都会清除和重建整个菜单。因此,覆盖此方法就足以解决问题。因为headercontainer类在框架中太深,很难扩展它,所以必须使用Ext.base.override方法

列子菜单的菜单项是根据

   items = headerContainer.query('>gridcolumn[hideable]')
询问。因此,在创建菜单项之前,必须首先按字母顺序对结果进行排序。我向类中添加了sortColumns方法,该方法完成所有排序工作

这就是我所做的:


我希望这就是您要查找的内容。

网格排序似乎与列下拉列表直接相关。在网格中拖动一列会改变下拉列表中的顺序…不知道为什么这没有被投票并标记为答案,这是一个非常好的解决方案,为我节省了大量的时间。