行を削除しようとしているagグリッドがあります...「スプライス」技術を使用してデータソースから行を削除できます。その後、テーブルを更新します。しかし、エラーが表示されています。これは行を削除するために使用しているコード
selectedvalue={} //this holds the selected row value
rowData=[]; //this holds all the row data
onRowSelected(event) {
this.selectedvalue = event;
}
deletebtn() {
for (let i = 0; i < this.rowData.length; i++) {
if (this.selectedvalue.node.data.make === this.rowData[i].make) {
this.rowData.splice(i, 1);
this.gridOptions.api.refreshView();
}
}
}
これは次のようなエラーを示しています->未定義のプロパティ「refreshView」を読み取ることができません...行の削除後にテーブルで行われた変更を監視する方法。
グリッドに行を再度設定する必要があります:スプライス後:
gridOptions.api.setRowData(gridOptions.rowData)
たぶん、このplunkrは役立ちます https://plnkr.co/0k4sYa
Ag-gridの著者は、ag-gridフォーラムでこれを説明しています
パフォーマンスを向上させるには、グリッドAPI呼び出しを使用して行を追加/削除します。
先頭に行を挿入するには、選択した行のコピーです:
var rowData = JSON.parse(JSON.stringify(selectedNode.data));
gridOptions.api.insertItemsAtIndex(0, [rowData]);
選択した行を削除するには:
var selectedNodes = gridOptions.api.getSelectedNodes();
gridOptions.api.removeItems(selectedNodes);
元の行のディープコピーの後にのみ新しい行を挿入してください。
それ以外の場合、apiは同じ行を引き続き参照します。
したがって、その後の新しい行の削除は、グリッドから元の行を削除します。
APIの詳細については、ドキュメントを参照してください。
https://www.ag-grid.com/javascript-grid-insert-remove/
ドキュメントで説明されているより効率的な方法があります: ag-Grid Updating Data 。
行が削除された後、メソッドapi.updateRowData
を使用する必要があります。
this.gridOptions.api.updateRowData({ remove: [array of rows you have deleted]});
たとえば、1行だけ削除した場合:
this.gridOptions.api.updateRowData({ remove: [this.rowData[i]]})
この方法では、グリッドはパラメーターの行を更新するだけで、他のすべてのビューステート(順序など)を保持します。
$events.refreshInfiniteCache();
グリッドを更新するためだけにこれを使用できます