在单元格值批量更改而不是一次更改一个值之后,我正在尝试更新ag-grid。我知道已经有一个方法(更改了单元值),可以为您提供与api和colDef一起更改的值。我还尝试了从ag-grid粘贴pasteEnd,但这仅适用于粘贴,如果用户仅编辑单元格值而不复制粘贴该怎么办。我正在尝试做的是有一种方法,该方法将在一两秒钟后调用,该方法将获取在ag-grid中更改的所有值,以避免向后端进行多次回合。该问题的可能扩展:How to launch a method after a cell value has been edited in ag-grid?
HTML
<ag-grid-angular [ngStyle]="{'height.px': innerHeight}" #agGridLevel class="ag-theme-balham"
[rowData]="rowData" [gridOptions]="gridOptions" [defaultColDef]="defaultColDef" [sideBar]="sideBar"
[columnDefs]="columnDefs" [excelStyles]="excelStyles" [rowSelection]="'multiple'"
(selectionChanged)="onSelectionChanged()" (rowClicked)="onRowClicked($event)"
[suppressCopyRowsToClipboard]="true"
[enableRangeSelection]="true"
(cellValueChanged)="onCellValueChanged($event)"
(gridReady)="onGridReady($event)">
>
</ag-grid-angular>
component.ts文件
P.S。我知道即使超时,该方法仍然会多次调用后端。这只是为了展示我正在尝试做的事情。
onCellValueChanged(params) {
console.log("Callback onCellValueChanged:", params);
if (params.newValue) {
this.changedValue.push({
field: params.colDef.field,
newValue: params.newValue.trim(),
id: params.data.id
});
setTimeout(() => {
this.updateCellValuesInDb(this.changedValue)
}, 1000);
}
}
如果某人知道如何批量加载一到两秒钟后更改的整个单元格值,而不是发送每个更改的值,将有很大帮助。请指教。
谢谢
答案 0 :(得分:0)
我能够根据评论使用间隔。一旦单元格值发生更改,就会发生onCellValueChanged事件,该事件将触发更改后的值,行的ID和实际的字段名称。这些值上的setTimeout()会发生变化,以防万一将10-20个值粘贴在一起以避免来回后端调用。
更新CellValue然后设置时间间隔(500)。
最后一步,在组件中声明为false的 isCellValueUpdated 布尔值将处理对后端的多次调用,并且每次对多个记录的实际请求都将完成一次批量加载。
onCellValueChanged(params) {
console.log('Callback onCellValueChanged:', params);
if (params.newValue) {
this.changedValue.push({
field: params.colDef.field,
newValue: params.newValue.trim(),
id: params.data.id
});
setTimeout(() => {
this.updateCellValues(this.changedValue);
}, 1000);
}
}
private updateCellValues(values: IGridChangedValues[]) {
const changeBooleanAfterValuesChange = interval(500);
this.updateDb({ values, changeBooleanAfterValuesChange });
}
private updateDb(
{ values, changeBooleanAfterValuesChange }:
{ values: IGridChangedValues[]; changeBooleanAfterValuesChange: Observable<number>; }) {
if (!this.isCellValueUpdated) {
this.isCellValueUpdated = true;
this._studyLevelService.updateCellValuesInDb(values).pipe(takeUntil(this.unsubscribe$)).subscribe(
(result: boolean) => {
if (result) {
} else {
this._dialogs.alert(new AlertDialogOptions(
'Error',
'Error Updating values'));
}
changeBooleanAfterValuesChange.pipe(takeUntil(this.unsubscribe$)).subscribe(
() => this.isCellValueUpdated = false
)
})
}
}
我希望可以有更好的解决方案来避免间隔和超时,但是我认为这是目前可用于ag-grid的最佳技术