我有一个网格面板我需要根据复选框的值显示/隐藏网格面板中的列。如果选中该复选框,我需要在网格中显示列,如果未选中,我需要隐藏网格中的列。
这是我的代码
var chkEnableDisplayResponsibilityForAction = '<%=Session["chkEnableDisplayResponsibilityForAction"]%>';
var flags = Boolean.parse(chkEnableDisplayResponsibilityForAction);
var flags1 = !Boolean.parse(chkEnableDisplayResponsibilityForAction)
var colModel = new Ext.grid.ColumnModel([
{ header: "PricePlanID", width: 100, sortable: true, dataIndex: 'PricePlanID', hidden: flags, hideable: flags1 },
]);
当我刷新页面时,我无法根据复选框的值切换列。但是当我登录并注销时,我能够看到网格面板中的更改。任何人都可以帮我刷新网格面板中的列值吗?
答案 0 :(得分:24)
如果看一下ExtJS API,特别是ColumModel有setHidden
方法,它会隐藏/显示GridPanel
中的列。
myGrid.getColumnModel().setHidden(0, true);
您还应该勾选复选框的onchange
事件,以便显示或隐藏列
答案 1 :(得分:12)
在Ext JS 4.1中,要隐藏列,请使用:
grid.columns[0].setVisible(false);
看起来getColumnModel()及其setHidden()方法不再是网格的一部分: http://docs.sencha.com/ext-js/4-1/#!/api/Ext.grid.Panel
答案 2 :(得分:3)
您可以使用列标题菜单显示/隐藏列 - 您可以选择要显示的列。无论如何,如果你想显示/隐藏一列,试试这个
myGrid.getColumnModel().setHidden(0, true);
答案 3 :(得分:1)
在ExtJS 4中获取对网格面板的访问权限,然后访问columns属性,这是一个Column对象数组。
从那里你可以使用数组迭代器方法(http://www.diveintojavascript.com/core-javascript-reference/the-array-object)来执行一个动作。
在下面的示例中,我根据其标题名称隐藏并显示了一些列,但您显然可以根据任何Column属性执行操作。
var grid = Ext.getCmp( 'my_grid_panel' );
grid.columns.forEach( function( col ) {
if( ( col.text == "Foo" ) || ( col.text == "Bar" ) ) {
col.setVisible( true );
} else if( col.text == "Baz" ) {
col.setVisible( false );
}
});
答案 4 :(得分:0)
我认为上面的答案非常好。 但是,让我给你一个建议。
1)在 ExtJS 4.x 中,建议使用 Ext.ComponentQuery 的方法代替 Ext.getCmp() < / p>
2)要隐藏/显示网格列,您可以使用以下代码
Ext.ComponentQuery.query('grid gridcolumn[dataIndex^="service"]')[0].hide()
或显示
Ext.ComponentQuery.query('grid gridcolumn[dataIndex^="service"]')[0].show()
它应解决隐藏/显示网格中的任何列的问题。
这里 grid 是你的网格,它可能是id或xtype等。
答案 5 :(得分:0)
setVisibleColumn : function(name, flag) {
name = Ext.Array.from(name);
var column;
for (var i = 0; i < name.length; i++) {
column = this.getColumn(name[i]);
if (column) {
flag ? column.show() : column.hide();
}
}
}