我有以下商店:
var dnrListStore = new Ext.data.ArrayStore({
fields: [
{name: 'SUBSYS_ART_NR', type: 'int'},
{name: 'ART_DESC', type: 'string'},
{name: 'SORTEN_TEXT', type: 'auto'},
{name: 'VAR', type: 'int'},
{name: 'GEBI', type: 'int'},
{name: 'DNR_ID', type: 'int'},
{name: 'STATUS', type: 'int'},
{name: 'LEVEL0', type: 'float'},
{name: 'VALUE0', type: 'float'},
{name: 'LEVEL1', type: 'float'},
{name: 'VALUE1', type: 'float'},
{name: 'LEVEL3', type: 'float'},
{name: 'VALUE3', type: 'float'}
],
data: dnrList
});
某些列(LEVELX和VALUEX)可能是null
,因为员工输入了值。
所以,我想隐藏那些没有价值的列。 checkValue
函数运行良好,返回正确的值。我尝试了以下但没有任何反应。
var checkValue = function(arg) {
var v = {};
for (var i = 0; i < dnrList.length; i++) {
v[i] = dnrList[i].data;
}
for (var key in v) {
if (v[key].hasOwnProperty(arg)) {
return true
} else {
return false
}
}
}
// on grid columns definition
columns: [
{text: 'LEVEL 1', dataIndex: 'LEVEL1', hidden: checkValue("LEVEL1")}
]
// or
columns: [
{text: 'LEVEL 1', dataIndex: 'LEVEL1', hidden: (checkValue("LEVEL1") ? true : false)}
]
你知道我们是怎么做到的吗?
另一种方式
通过这种方式,我可以完成任务,但是不可行!
columns:[
{
text: 'LEVEL 1', dataIndex: 'LEVEL1',
renderer: function(val, meta, rec, row, col) {
if (val == null) {
Ext.getCmp('summary-grid').headerCt.remove(col);
} else {
return rec.get('LEVEL1')
}
}
}
]
答案 0 :(得分:2)
我不认为您的解决方案/方法是可行的,用户应该知道哪些值为null。如果您对列进行了以下响应(比如第1级),您会怎么做:
LEVEL 1 ------ (null) ----> you will set LEVEL 1 column hidden some-value ----> and what now? some-other-value ----> set again visible?
无论如何,如果你想在列中的所有数据为空时隐藏列,那么你可以在store的load事件上添加这样的逻辑,如下所示:
store.on('load', function() {
nullbaleColumns = new Array();
// iterate all data,
// get all columns whose data is null and push columns into nullbaleColumns
// you can use store.each()
// get grid headerCt
// get all columns
// hide columns whose data is null
var columns = grid.headerCt.getGridColumns();
// hide and show columns according to dataIndex or any other parameters by iterating
// nullbaleColumns and columns using hide() and show() methods
columns[4].hide(); // 4th entire column is null, so hide
});