grid.getcolumnModel().setHidden(0,true) 会影响到列菜单而不是网格面板。在列菜单中,您可以启用或禁用该列。我们如何动态地向网格面板添加或删除列?
我使用“reconfigure”方法动态更改网格列: http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.grid.Panel-method-reconfigure
这里有一个不错的例子:http://marcusschiesser.de/2013/12/21/dynamically-changing-the-structure-of-a-grid-in-extjs-4-2/
reconfigure
函数可能与插件不兼容,特别是当你有像 FilterBar
这样的东西时。
如果你只需要根据一些全局设置执行一次此操作,可以使用 initComponent
并更改初始配置。确保在调用 this.callParent();
之前对所有配置进行更改。
已在 ExtJS 6.2 中测试(但也应该适用于 ExtJS 4 和 5)
initComponent: function() {
// less columns for this setting
if (!app.Settings.dontUseFruits()) {
var newColumns = [];
for(var i=0; i<this.columns.items.length; i++) {
var column = this.columns.items[i];
// remove (don't add) columns for which `dataIndex` starts with "fruit"
if (column.dataIndex.search(/^fruit/) < 0) {
newColumns.push(column);
}
}
this.columns.items = newColumns;
}
this.callParent();
为了显示列更改,您可能需要刷新Ext.grid.GridView。
grid.getView().refresh(true) // true to refresh HeadersToo
var newColModel = new Ext.grid.ColumnModel({
columns: [
grid.getSelectionModel(),
{
header: 'New column 1'
}, {
header: 'New column 2'
}
],
defaults: {
sortable: false
}
});
grid.store.reader = new Ext.data.JsonReader({
root: 'items',
totalProperty: 'count',
fields: [
// Please provide new array of fields here
]
});
grid.reconfigure(grid.store, newColModel);
或许尝试一下
store.add(new_record); store.commitChanges();
或者使用store.remove()和store.commitChanges()