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。这种通过构建贴图的方法非常有用。