Extjs Grid面板 - 渲染后更改enableColumnHide属性

时间:2012-11-15 15:10:20

标签: javascript extjs grid extjs4.1

请帮忙!我正在使用ExtJs 4.1网格面板。

我正在寻找一种在渲染后更改网格enableColumnHide属性的方法。 我在几个屏幕中重复使用相同的网格并进行微小的更改,主要是隐藏了一些列。

在其中一个屏幕中,我只留下了不应该隐藏的列,因此我想完全从列标题菜单中删除该选项,但是当我到达其他屏幕之一时将其恢复。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我之前也遇到过类似的问题。 你可以在这里查看我的解决方法:

Extjs Grid panel - Hide a column with hideable=false

基本上我已经注册到网格标题菜单的“beforeshow”事件,并根据每列上的“可隐藏”属性隐藏菜单上的每个可隐藏列复选框项。

你可以用“enableColumnHide”做同样的事情(只需隐藏“Columns”子菜单,这只是一个菜单项本身)

答案 1 :(得分:1)

似乎没有明显的方法可以做到这一点,但我发现了一个hack - 更改enableColumnHide headerCt并在每次更改该值时销毁标题菜单。示例代码:

var checkbox = new Ext.form.field.Checkbox({
    renderTo: 'checkbox',
    boxLabel: 'enableColumnHide',
    checked: true,
    handler: function(sender, checked) {
        var h = grid.headerCt;
        h.enableColumnHide = checked;
        if (h.menu) {
            h.menu.destroy();
            h.menu = null;
        }
    }
});

通过在列上使用hideable也可以使用它:

var checkbox = new Ext.form.field.Checkbox({
    renderTo: 'checkbox',
    boxLabel: 'enableColumnHide',
    checked: true,
    handler: function(sender, checked) {
        Ext.each(grid.columns, function(c){
            c.hideable = checked;
        });
    }
});

使用enableColumnHide工作示例:http://jsfiddle.net/M3Aqq/5/

使用hideable工作示例:http://jsfiddle.net/M3Aqq/9/