Angular 批量编辑后更新ag网格单元值
我正在尝试更新ag网格,在单元值批量更改之后,而不是一次更改一个值。我知道已经有了一个方法(cellvaluechanged),它可以为您提供与api和colDef一起更改的值。我还尝试了从ag网格粘贴结束,但这只适用于粘贴,如果用户只编辑单元格值而不复制粘贴会怎么样。我试图做的是有一个方法,它将在一两秒钟后被调用,获取ag网格中更改的所有值,以避免多轮到后端。这一问题的可能扩展: Html 如果有人知道如何批量加载在一两秒钟后更改的整个单元格值,而不是发送每个更改的值,这将有很大帮助。请给我一些建议Angular 批量编辑后更新ag网格单元值,angular,ag-grid,ag-grid-angular,Angular,Ag Grid,Ag Grid Angular,我正在尝试更新ag网格,在单元值批量更改之后,而不是一次更改一个值。我知道已经有了一个方法(cellvaluechanged),它可以为您提供与api和colDef一起更改的值。我还尝试了从ag网格粘贴结束,但这只适用于粘贴,如果用户只编辑单元格值而不复制粘贴会怎么样。我试图做的是有一个方法,它将在一两秒钟后被调用,获取ag网格中更改的所有值,以避免多轮到后端。这一问题的可能扩展: Html 如果有人知道如何批量加载在一两秒钟后更改的整个单元格值,而不是发送每个更改的值,这将有很大帮助。请给我一
谢谢我可以根据评论使用Interval。一旦单元格值更改,就会触发onCellValueChanged事件,从中我得到更改的值、行的Id以及实际的字段名。在值上设置Timeout(),以防有10-20个值粘贴在一起以避免来回的后端调用 更新CellValue,然后设置间隔(500) 在最后一步中,组件中声明为false的isCellValueUpdatedboolean将处理对后端的多个调用,对于多个记录的每个实际请求,将执行一次批量加载
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
)
})
}
}
onCellValueChanged(参数){
log('Callback onCellValueChanged:',params);
if(参数newValue){
这个.changedValue.push({
字段:params.colDef.field,
newValue:params.newValue.trim(),
id:params.data.id
});
设置超时(()=>{
this.updateCellValues(this.changedValue);
}, 1000);
}
}
私有updateCellValues(值:IGridChangedValues[]){
const changeboolean aftervalueschange=间隔(500);
this.updateDb({values,changeBooleanAfterValuesChange});
}
私有更新的(
{values,changeBooleanAfterValuesChange}:
{values:IGridChangedValues[];changeBooleanAfterValuesChange:Observable;}){
如果(!this.isCellValueUpdated){
this.isCellValueUpdated=true;
此.u studyLevelService.updateCellValuesInDb(values).pipe(takeUntil(this.unsubscribe$).subscribe(
(结果:布尔值)=>{
如果(结果){
}否则{
此._dialogs.alert(新的AlertDialogOptions(
“错误”,
“更新值时出错”);
}
changeBooleanAfterValuesChange.pipe(takeUntil(this.unsubscribe$)。订阅(
()=>this.isCellValueUpdated=false
)
})
}
}
我希望有更好的解决方案来避免间隔和超时,但我认为这是ag grid目前可用的最好的技术我不得不处理类似的情况,但对我有帮助的是,有一个按钮供用户接受批量更新,所以也许你可以妥协并创建一个这样的按钮,一旦它点击,你就可以这样做。
updateCellValuesInDb
。谢谢你的帮助评论。我不愿意添加按钮的唯一原因是,它会带走ag grid excel复制粘贴的美丽。我一直在寻找ag-grid提供的开箱即用的方法/事件。只需使用当前方法(收集内存中的更改),但只允许使用or最多每隔“一秒或两秒”调用updateCellValuesInDb
。
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);
}
}
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
)
})
}
}