我是Angular 2项目(2.0.0-RC.4)并运行ag-grid(5.0.1)。
我尝试使用refreshCells()方法刷新网格中的特定单元格,而不重置行。
我在Ag-Grid文档中看到了一个示例,它展示了如何使用refreshCells()
https://www.ag-grid.com/javascript-grid-refresh/
我试图创建一个符合我需求的副本,但它没有用。
网格拒绝刷新单元格。
ChangeValue() {
var updatedNodes = [];
this.gridOptions.api.forEachNode((rowNode: RowNode) => {
let data = rowNode;
if(data.data.timestamp == "t") {
data.data.asset *= 2;
updatedNodes.push(rowNode);
}
});
console.log(updatedNodes);
this.gridOptions.api.refreshRows(updatedNodes);
this.gridOptions.api.refreshView();
}
我上面显示的方法链接到一个按钮,所以一旦我点击按钮,它应该增加rowNode中的资产,该资产与时间戳匹配" t"。
有关更多详细信息,下面的钩子和构造函数用于将数据样本添加到网格并创建columnDefs。
ngAfterViewChecked() {
let dataSample: any[] = [
{
timestamp: "t",
asset: 100
}
]
this.gridOptions.api.setRowData(dataSample);
// Hide ag-grid overlay
this.gridOptions.api.hideOverlay();
}
constructor() {
this.columnDefs = [
{
headerName: 'Timestamp',
field: 'timestamp'
}, {
headerName: 'Asset',
field: 'asset'
}
]
}
问题是,一旦我点击按钮,ChangeValue()方法会运行但不会因某种原因更新单元格值。
答案 0 :(得分:0)
在Ag-Grid团队的帮助下,我找到了导致此问题的原因。
我要感谢他们。
refreshRows()
导致重绘视图,其中以触发器ngAfterViewChecked()
结束,这将重置网格中的数据。
所以代码已经进入了圈子。