1

是否有可以在 ExtJS 中的 Ext.grid.Panel 上调用的函数,如果其中一些列默认隐藏,则可以使所有列可见?每当最终用户需要显示隐藏的列时,他们需要单击每一列。下面,我有一些代码可以在您选择字段标题时添加自定义菜单选项。我想执行此功能,以便显示所有列。

作为下面的示例,我默认隐藏了“项目 ID”和“用户创建”。通过选择“选择所有列”将打开这些列,因此它们显示在列表视图中。

        listeners: {

            ... 

            },
            afterrender: function() {
                var menu = this.headerCt.getMenu();
                menu.add([{
                    text: 'Select All Columns',
                    handler: function() {
                        var columnDataIndex = menu.activeHeader.dataIndex;
                        alert('custom item for column "'+columnDataIndex+'" was pressed');
                    }
                }]);           
            }
        }
    });

在此处输入图像描述

============================

答案(带代码):

这是我根据下面 Eric 的代码决定做的事情,因为隐藏所有列是愚蠢的。

            afterrender: function () {
                var menu = this.headerCt.getMenu();
                menu.add([{
                    text: 'Show All Columns',
                    handler: function () {
                        var columnDataIndex = menu.activeHeader.dataIndex;
                        Ext.each(grid.headerCt.getGridColumns(), function (column) {
                            column.show();
                        });
                    }
                }]);
                menu.add([{
                    text: 'Hide All Columns Except This',
                    handler: function () {
                        var columnDataIndex = menu.activeHeader.dataIndex;
                        alert(columnDataIndex);
                        Ext.each(grid.headerCt.getGridColumns(), function (column) {
                            if (column.dataIndex != columnDataIndex) {
                                column.hide();
                            }
                        });
                    }
                }]);
            }
4

2 回答 2

5

如果你不需要任何特殊的逻辑,你可以尝试这样的事情:

Ext.each(grid.headerCt.getGridColumns(), function(column){
    column.show();
});
于 2012-08-27T17:01:08.553 回答
1

我也必须这样做,起初我试图实现一个像 Eric 一样的解决方案,但它在较慢的计算机上产生了主要的滞后问题。在显示每一列后,它会在网格上进行完整的组件布局。

我用这个规避了这个:

grid.suspendLayout = true;
Ext.each(grid.headerCt.getGridColumns(), function(column) {
    column.show();
});
grid.suspendLayout = false;
grid.doComponentLayout();
于 2012-08-27T21:37:02.830 回答