Gridview 如何根据行的选择和某些条件检查更改网格中列的颜色

Gridview 如何根据行的选择和某些条件检查更改网格中列的颜色,gridview,extjs,extjs4,extjs4.2,Gridview,Extjs,Extjs4,Extjs4.2,我正在尝试根据选择更改列的颜色。以下是我迄今为止尝试的内容 var-selectionmodel=Ext.create('Ext.selection.CheckboxModel'); Ext.create('Ext.data.Store'{ storeId:'SimpsonStore', 字段:[“名称”、“电子邮件”、“更改”], 数据:{'items':[ {“姓名”:“丽莎”,“电子邮件”:lisa@simpsons.com“,“更改”:100}, {'name':'Bart',“emai

我正在尝试根据选择更改列的颜色。以下是我迄今为止尝试的内容

var-selectionmodel=Ext.create('Ext.selection.CheckboxModel');
Ext.create('Ext.data.Store'{
storeId:'SimpsonStore',
字段:[“名称”、“电子邮件”、“更改”],
数据:{'items':[
{“姓名”:“丽莎”,“电子邮件”:lisa@simpsons.com“,“更改”:100},
{'name':'Bart',“email”:bart@simpsons.com“,“更改”:-20},
{'name':'Homer',“email”:home@simpsons.com“,“更改”:100},
{'name':'Marge',“email”:marge@simpsons.com“,“更改”:-20}
]},
代理:{
键入:“内存”,
读者:{
键入:“json”,
root:'项目'
}
}
});
Ext.create('Ext.grid.Panel'{
id:“sgrid”,
标题:《辛普森一家》,
存储:Ext.data.StoreManager.lookup('SimpsonStore'),
selModel:selectionmodel,
栏目:[
{标题:'Name',数据索引:'Name'},
{header:'Email',dataIndex:'Email',flex:1},
{标题:'Change',数据索引:'Change',tdCls:'x-Change-cell'}//
],
身高:200,
宽度:400,
renderTo:Ext.getBody(),
听众:{
选择更改:功能(thisobj、selected、eOpts){
var store=Ext.getStore('simpsonssstore');
var grid=Ext.getCmp('sgrid');
var selected=grid.getSelectionModel();
var count=store.getCount();
var项目=[];
//grid.getView.removeCls(“价格下跌”);

对于(i=0;i您的方法非常好,而且您几乎做到了。您似乎只是对如何使用记录(模型)有点困惑

只需将此函数用作
selectionchange
处理程序,即可:

// selected is an array of models (remember you have multiple selection enabled
// in you grid)
function(selModel, selected){
    var grid = Ext.getCmp('sgrid'),
        store = grid.getStore(),
        view = grid.getView(),

        selectedChanges = {},

        sameCls = 'change-same',
        diffCls = 'change-diff';

    // build a map of change values that will be considered as "same"
    Ext.each(selected, function(record) {
        selectedChanges[record.get('change')] = true;
    });

    // loops through all records and update their css class according to their
    // change value
    store.each(function(record) {

        // isn't that more expressive that accessing it through the store's item?
        var change = record.get('change');

        if (selectedChanges[change]) {
            // addRowCls can accept model as its first arg
            view.addRowCls(record, sameCls);
            view.removeRowCls(record, diffCls);
        } else {
            view.removeRowCls(record, sameCls);
            view.addRowCls(record, diffCls);
        }
    });
}

您可能还想为类为
.x-grid-row-selected
的行添加CSS规则,以便您的颜色标记也显示在所选行中。

您的方法非常好,而且您几乎做到了。您似乎对如何使用记录(模型)有点困惑

只需将此函数用作
selectionchange
处理程序,即可:

// selected is an array of models (remember you have multiple selection enabled
// in you grid)
function(selModel, selected){
    var grid = Ext.getCmp('sgrid'),
        store = grid.getStore(),
        view = grid.getView(),

        selectedChanges = {},

        sameCls = 'change-same',
        diffCls = 'change-diff';

    // build a map of change values that will be considered as "same"
    Ext.each(selected, function(record) {
        selectedChanges[record.get('change')] = true;
    });

    // loops through all records and update their css class according to their
    // change value
    store.each(function(record) {

        // isn't that more expressive that accessing it through the store's item?
        var change = record.get('change');

        if (selectedChanges[change]) {
            // addRowCls can accept model as its first arg
            view.addRowCls(record, sameCls);
            view.removeRowCls(record, diffCls);
        } else {
            view.removeRowCls(record, sameCls);
            view.addRowCls(record, diffCls);
        }
    });
}

您可能还希望为类为
.x-grid-row-selected
的行添加CSS规则,以便颜色标记也显示在所选行中。

谢谢rixo。这种通过构建贴图的方法非常有用。谢谢rixo。这种通过构建贴图的方法非常有用。