如何更改ExtJS网格中一行的文本颜色?

Edw*_*uay 5 grid formatting extjs

我创建了以下ExtJS网格.

我想更改第二行中所有单元格的文本颜色.

但是,我只能找到如何更改所有行中所有单元格的颜色,包括标题文本,如下所示:

var myData = [
    [4, 'This is a whole bunch of text that is going to be word-wrapped inside this column.', 0.24, 3.0, '2010-11-17 08:31:12'],
    [16, 'Computer2-this row should be red', 0.28, 2.7, '2010-11-14 08:31:12'],
    [5, 'Network1', 0.02, 2.5, '2010-11-12 08:31:12'],
    [1, 'Network2', 0.01, 4.1, '2010-11-11 08:31:12'],
    [12, 'Other', 0.42, 5.0, '2010-11-04 08:31:12']
];

var myReader = new Ext.data.ArrayReader({}, [{
        name: 'id',
        type: 'int'
    }, {
        name: 'object',
        type: 'object'
    }, {
        name: 'status',
        type: 'float'
    }, {
        name: 'rank',
        type: 'float'
    }, {
        name: 'lastChange',
        type: 'date',
        dateFormat: 'Y-m-d H:i:s'
    }]);

var grid = new Ext.grid.GridPanel({
    region: 'center',
    style: 'color:red', //makes ALL text in grid red, I only want one row to be red
    store: new Ext.data.Store({
        data: myData,
        reader: myReader
    }),
    columns: [{
            header: 'ID',
            width: 50,
            sortable: true,
            dataIndex: 'id',

            hidden: false

        }, {
            header: 'Object',
            width: 120,
            sortable: true,
            dataIndex: 'object',
            renderer: columnWrap

        }, {
            header: 'Status',
            width: 90,
            sortable: true,
            dataIndex: 'status'
        }, {
            header: 'Rank',
            width: 90,
            sortable: true,
            dataIndex: 'rank'
        }, {
            header: 'Last Updated',
            width: 120,
            sortable: true,
            renderer: Ext.util.Format.dateRenderer('Y-m-d H:i:s'),
            dataIndex: 'lastChange'
        }],
    viewConfig: {
        forceFit: true
    },
    title: 'Computer Information',
    width: 500,
    autoHeight: true,
    frame: true,
    listeners: {
        'rowdblclick': function(grid, index, rec){
            var id = grid.getSelectionModel().getSelected().json[0];
            go_to_page('edit_item', 'id=' + id);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

如何更改第二行中单元格的文本颜色,我该怎么办?

McS*_*tch 8

你想覆盖getRowClass,传递给GridPanel的viewConfig.GridPanel的API文档中提供了一个示例:

   viewConfig: {
        forceFit: true,

   //   Return CSS class to apply to rows depending upon data values
        getRowClass: function(record, index) {
            var c = record.get('change');
            if (c < 0) {
                return 'price-fall';
            } else if (c > 0) {
                return 'price-rise';
            }
        }
    },
Run Code Online (Sandbox Code Playgroud)

GridView 包含方法,所以在API中查看更多信息:

getRowClass( Record record, Number index, Object rowParams, Store store )
Run Code Online (Sandbox Code Playgroud)

重写此函数以在呈现期间将自定义CSS类应用于行.您还可以为当前行的行模板提供自定义参数,以使用rowParams参数自定义其呈现方式.此函数应返回将添加到行的换行div的CSS类名称(或空字符串''表示无).要应用多个类名,只需在字符串中返回空格分隔(例如,'my-class another-class').

您可以使用index参数将CSS应用于某一行.


Lio*_*han 4

不确定这是否有帮助,但你可以尝试。我在本地尝试过,它确实改变了第二行中所有字符的颜色。

将侦听器添加到网格:

listeners:{
    viewready: function(g){
        g.getView().getRow(1).style.color="#f30";
    }
}
Run Code Online (Sandbox Code Playgroud)

“当 时,您可以使用中的方法viewready获取行的 div 。之后是分配颜色的正常 Javascript(或添加额外的类,如果您愿意)getRow()GridView

干杯

编辑

我意识到如果您的商店远程检索数据,它就不起作用。视图已准备好,但数据尚未准备好。这个方法会失败。