如何在extjs 4.1网格中为特定列设置动态数据

如何在extjs 4.1网格中为特定列设置动态数据,extjs,extjs4,extjs4.1,Extjs,Extjs4,Extjs4.1,我为一个网格显示了2列 “1年数据”和“2年数据” Grid有一个带有选项[1Yr.2Yr]的组合框的工具栏 现在,当我要更改组合时,我希望在不重新加载网格和不点击任何服务的情况下更改该列的值 那么,是否有任何选项可以通过从存储中读取来更改columndata 提前感谢您的帮助 网格绑定到一个商店,就像Izhaki说的那样。因此,如果要刷新网格,只需修改存储的数据,网格就会自动刷新 我想这就是你想做的。我希望它能帮助你 /* MODEL */ Ext.define('YrModel', {

我为一个网格显示了2列

“1年数据”和“2年数据”

Grid有一个带有选项[1Yr.2Yr]的组合框的工具栏

现在,当我要更改组合时,我希望在不重新加载网格和不点击任何服务的情况下更改该列的值

那么,是否有任何选项可以通过从存储中读取来更改columndata


提前感谢您的帮助

网格绑定到一个商店,就像Izhaki说的那样。因此,如果要刷新网格,只需修改存储的数据,网格就会自动刷新

我想这就是你想做的。我希望它能帮助你

/* MODEL */
Ext.define('YrModel', {
    extend: 'Ext.data.Model',
    fields: [{
        name: 'yearOne',
        type: 'int'
    }, {
        name: 'yearTwo',
        type: 'int'
    }],
});

/* STORE */
Ext.create('Ext.data.Store', {
    storeId: 'YrStore',
    model: "YrModel",
    data: data,
    autoLoad: true,
    proxy: {
        type: 'memory',
        reader: {
            type: 'json'
        }
    }
});

/* COMBOBOX STORE */
var comboboxStore = Ext.create('Ext.data.Store', {
    fields: ['abbr', 'name'],
    data: [{
        "abbr": "yearOne",
        "name": "Year One"
    }, {
        "abbr": "yearTwo",
        "name": "Year Two"
    }]
});

/* COMBOBOX */
var combobox = Ext.create('Ext.form.ComboBox', {
    fieldLabel: 'Choose a year',
    store: comboboxStore,
    queryMode: 'local',
    editable: false,
    displayField: 'name',
    valueField: 'abbr'
});

/* LISTENER TO COMBOBOX SELECT EVENT */
combobox.on({
    select: onComboboxSelect
});

/* METHOD THAT HANDLE THE COMBOBOX SELECT EVENT */
function onComboboxSelect(combo, records) {
    var yearSelectValue = null;
    var yearSelected = (records.length > 0) ? records[0].get('abbr') : null;

    Ext.getStore('YrStore').each(function (record, index, count) {
        yearSelectValue = record.get(yearSelected);
        record.set(yearSelected, yearSelectValue + 1);
    });
}

/* GRID */
Ext.create('Ext.grid.Panel', {
    title: 'Year Data',
    renderTo: Ext.getBody(),
    store: Ext.getStore('YrStore'),
    viewConfig: {
        markDirty: false
    },
    columns: [{
        text: 'Year One',
        dataIndex: 'yearOne',
        flex: 1,
        sortable: true
    }, {
        text: 'Year Two',
        dataIndex: 'yearTwo',
        flex: 1,
        sortable: true
    }

             ],
    dockedItems: [{
        xtype: 'toolbar',
        dock: 'bottom',
        items: [combobox]
    }]
});

这个问题很不清楚。网格绑定到存储。网格显示存储所保存的记录。如果存储更改,网格将更新。网格是否真的显示两列?或者它是否显示可能需要显示第1年数据或第2年数据的单个列?如果是后者,请将您的所有记录保存在商店中(两年),并在本地筛选商店。感谢Izhaki的回复,很抱歉没有正确解释该场景。。。。这里我有一个组合框和两个值。网格有两列“1年数据”和“2年数据”。如果我选择1Yr in组合,则只有标题为“1Yr Data”的1列将填充新数据。同样,如果我从combo中选择2年,第二列将填充新数据。非常感谢您为我节省了大量时间。。。再次感谢大家的帮助!!!现在,如果我们放置一个selModel:Ext.create('Ext.selection.CheckboxModel'),让选择1记录并更改组合,那么在列数据更改之后,复选框将被取消选中。。。。那么,有没有办法保持复选框的状态,这样就不需要再次检查记录了?在我的网格数据中,我显示了大约1500条记录,并且在设置值时需要一些时间,因此我尝试在更新时屏蔽网格,并在更新后取消屏蔽。如何捕获afterupdate?onchange事件如果有alert(),我将调用此方法,并且其工作正常。updateRecords:function(combo,newValue,oldValue,columnId,statId){if(oldValue!=未定义){grid.setLoading('some text');alert(“将设置所有记录”);var cindex=combo.getValue();var column=Ext.getCmp(columnId);grid.getStore().each(函数(record,index,count){var recordDataObject=record.get(statId);record.set(columnId,recordDataObject[cindex]);});}grid.setLoading(false);}