4

我像这样初始化 ag-grid:

<ag-grid-ng2 [rowData]="records"></ag-grid-ng2>

将新项目添加到记录数组后,ag-grid 中的行保持不更新。我必须调用 setRowData(records)。但这非常慢,并且 ag-grid 会失去其状态(如聚焦单元格)。

是否有另一种方法可以在更改rowData.

4

4 回答 4

4

不,没有其他办法。网格期望 rowData 是不可变的,这意味着您必须替换数组才能获取 [rowData] 属性。正如您所做的那样,解决此问题的方法是调用 api.setRowData() 方法,该方法强制网格将 rowData 视为一组新数据。

于 2016-01-28T23:48:41.553 回答
1

最近我注意到一个新功能this.gridOptions.api.updateRowData(Tranactions)。您传递一个包含三个数组的对象:

var transactions = {
    add: [/*array of records you want to add.*/]
    remove: [/*array of records you want to remove.*/]
    update: [/*array of records you want to update.*/]
}

this.gridOptions.api.updateRowData(tranactions);

参考:https ://www.ag-grid.com/javascript-grid-data-update/?framework=javascript 。(出于某种原因,他们在该页面上调用了函数updateData但不存在这样的函数。而是调用它updateRowData。)

于 2017-06-27T04:41:08.137 回答
0

这就是我最终添加新记录的方式。您可以为此使用该applyTransaction()功能(我认为这种用途被称为updateRowData())。

var newItems = [createNewRowData(), createNewRowData(), createNewRowData()];
var res = this.gridApi.applyTransaction({
  add: newItems,
  addIndex: addIndex,
});

上面的代码来自他们的例子

于 2021-01-01T00:15:00.263 回答
0

找到了解决办法。可能是我失去了一些功能并且会有一些错误,但对我来说它现在可以工作了。

AddRecord(data) {
    this.records.push(data);
    var id = this.records.length-1;
    var node = {childIndex:id, data: this.records[id], firstChild: false, id:id, lastChild: false};
    this.gridOptions.api.grid.inMemoryRowController.rowsAfterMap.push(node);
    this.gridOptions.api.rowRenderer.refreshView(id);
    this.gridOptions.api.hideOverlay();
}
于 2016-01-29T09:11:06.553 回答