【问题标题】:How to change extjs grid single cell background color depending on value changes?如何根据值更改更改 extjs 网格单单元格背景颜色?
【发布时间】:2011-12-23 11:55:47
【问题描述】:

要更改整行背景颜色,我们可以使用 getRowClass,但是如何仅对一个单元格和特定列执行相同的逻辑......有什么想法吗?

//EXTJS
viewConfig: {
    getRowClass: function(record, index) {
        var c = record.get('change');
        if (c < 0) {
            return 'price-fall';
        } else if (c > 0) {
            return 'price-rise';
        }
    }
}

//CSS
.price-fall { 
        background-color: #FFB0C4;
}
.price-rise {
        background-color: #B0FFC5;
}

编辑:

有一种方法可以做到这一点:

 function change(val){
    if(val > 0){
        return '<div class="x-grid3-cell-inner" style="background-color:#B0FFC5;"><span style="color:green;">' + val + '</span></div>';
    }else if(val < 0){
        return '<div class="x-grid3-cell-inner" style="background-color:#FFB0C4;"><span style="color:red;">' + val + '</span></div>';
    }
    return val || 0;
}

然后只是:

...
{header: 'Change', width: 75, sortable: true, renderer: change, dataIndex: 'change', align: 'center'}
...

但是这种方式网格会随着从白色到彩色背景的变化而变形...... ???

还有其他想法吗?

编辑
自定义 css 应用于列后,如何在短时间内将其删除,以便在值更改时出现 blink 一次?类似setTimeout("remove-css()",1000);Ext.Function.defer(remove-css, 1000);
有什么想法吗?

【问题讨论】:

    标签: css extjs grid extjs4 row


    【解决方案1】:

    我在做另一件事时也发现了另一种方法;

    在列定义中:

    {
        dataIndex: 'invoicePrintedFlag', 
        header: 'Fatura',
        width: 50,
        renderer : function(value, metadata, record) {
            if (record.get('invoiceAddressId') != null){
                metadata.tdCls = metadata.tdCls +" alertedCell";
            }
    
            return '<span class="iconbox icon-'+ value +'"></span>';
        }
    }
    

    如果你完全操作单元格,你可以使用renderer,这里是metadata

    metadata: Object {tdCls: "", style: ""} 
    

    如果您使用样式,它将被添加到 TD 内的内容 DIV 中

    <td class=" x-grid-cell x-grid-cell-gridcolumn-1067" id="ext-gen1432">
        <div unselectable="on" class="x-grid-cell-inner x-unselectable" style=" text-align: left;" id="ext-gen1426">
        // Content comes here
        </div>
    </td>
    

    如果你使用tdCls,它将被添加到TD的attr类中

    <td class=" x-grid-cell x-grid-cell-gridcolumn-1067   alertedCell " id="ext-gen1462">
        <div unselectable="on" class="x-grid-cell-inner x-unselectable" style="; text-align: left;" id="ext-gen1463">
        // Content comes here
        </div>
    </td>
    

    您也可以根据需要返回 html。

    【讨论】:

    • 这适用于 Ext 2.3,但您需要设置 metadata.css 而不是 metadata.tdCls
    【解决方案2】:

    我建议使用 getRowClass 并将额外的 cls 应用于所需的列:

    Ext.create('Ext.grid.Panel', {
        columns: [
            // ...
            { header: 'Change', dataIndex: 'change', tdCls: 'x-change-cell' },
            // ...
        ],
    
        viewConfig: {
            getRowClass: function(record, index) {
                var c = record.get('change');
                if (c < 0) {
                    return 'price-fall';
                } else if (c > 0) {
                    return 'price-rise';
                }
            }
        },
        // ...
    });
    

    CSS:

    .price-fall .x-change-cell {
        background-color: #FFB0C4;
        color:red;
    }
    .price-rise .x-change-cell {
        background-color: #B0FFC5;
        color:green;
    }
    

    这里是demo

    【讨论】:

      【解决方案3】:
      renderer: function(value, metaData, record, rowIndex, colIndex, store, view) {
      
        metaData.tdAttr = 'style="background-color:#b0e987;color:black;"';
      
        value=Ext.util.Format.number(value, '$ 0,000.00');
      
        return value;
      
      },
      

      【讨论】:

      • 我不能使用行类,因为我的值就是我的颜色。所以你的解决方案对我有用。唯一的问题是行选择覆盖了 td 背景。有什么想法吗?
      猜你喜欢
      • 2013-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-30
      • 2014-03-12
      • 2015-08-22
      • 1970-01-01
      相关资源
      最近更新 更多