Ag-grid + Angular 2:动态更改行节点中列的cellClass

时间:2018-09-18 05:27:18

标签: angular ag-grid

我有一个要求,如果一列的值与相邻两行不同,则需要更新单元格的背景色。另外,我希望能够仅对网格的某些列而不是对所有列执行此操作。 (参考图片) Column with value change highlighted in red color

我所做的是:

  1. 我使用的forEachNode方法获取了网格中的所有行节点 gridApi。
  2. 我将列的值与我​​的下一个值进行了比较 数据数组。
  3. 如果值不同,我将更新 节点中的特定列。

    this.gridApi.forEachNode(function (node) {
                if (node.rowIndex + 1 < currDetailGridData.length) {
                    if (node.data['ColumnKey'] != currDetailGridData[node.rowIndex + 1]['ColumnKey']) {
                        var nodeToHighlight = node.columnController.gridColumns.find(x => x.colId = 'ColumnKey');
                        nodeToHighlight.colDef.cellClass += 'bgColorRed';
                    }
                }
            });
    

但是,这似乎不起作用。需要您的帮助来识别,我在这里做什么错了?

1 个答案:

答案 0 :(得分:1)

可能是在state = { array: JSON.parse(localStorage.getItem('session')) || [] }; 内绑定rowData之后执行的。 如果是这样,onGridReady需要完成数据呈现过程,因此您可以在grid中使用hack对其进行包装,但我不建议使用这种情况。

setTimeout

另一种方法是先准备setTimeout(() => { this.gridApi.forEachNode(node =>{ ... }) }, 100); ,然后使用columnDef API方法通知setColumnDefs避免循环检查。

最后一个,我推荐,在grid

中使用cellClass绑定作为function
columnDef