You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

agGrid按Tab切换单元格时,目标单元格未更新值的问题求助

AG Grid 单元格编辑后Tab切换不更新值的解决方案

问题原因

编辑cell1按Tab触发cell2进入编辑模式时,AG Grid可能在你更新ligneTarif数据前就已经读取了cell2的原始值,后续调用refreshCells()默认不会强制刷新处于激活编辑状态的单元格,导致显示值未同步。

解决方法

1. 强制指定刷新目标单元格

调用refreshCells()时传入参数,强制刷新目标列和行,跳过编辑状态限制:

// 赋值更新数据
ligneTarif[`${tarif}${typesValeursTarif.margeEnseignant}`] = newValue;
// 精准刷新cell2所在的单元格
agGrid?.api.refreshCells({
  force: true, // 强制刷新,忽略单元格状态
  columns: ['你的cell2列字段名'], // 替换为cell2绑定的字段名或colId
  rowNodes: [agGrid.api.getRowNode(ligneTarif)] // 刷新当前行
});

2. 确保数据响应式(框架场景)

如果使用Vue/React等框架,需保证ligneTarif是响应式对象:

  • Vue:若动态添加属性,需用Vue.set(ligneTarif, 属性名, newValue)或ES6 Proxy代理对象
  • React:需通过setState更新数据,直接修改对象不会触发视图更新

3. 调整编辑事件时机

在cell1的onCellEditingStopped事件中完成数据更新,而非onCellValueChanged(后者可能在Tab切换后才触发),确保cell2进入编辑前数据已更新。

4. 手动同步编辑单元格值

如果cell2已进入编辑模式,可直接获取其编辑器实例并更新值:

const cell2Params = agGrid.api.getCellRendererInstances({
  columns: ['你的cell2列字段名'],
  rowNodes: [agGrid.api.getRowNode(ligneTarif)]
})[0];
if (cell2Params && cell2Params.getFrameworkComponentInstance) {
  const editor = cell2Params.getFrameworkComponentInstance();
  editor.setValue(newValue); // 根据编辑器组件的API设置值
}

内容的提问来源于stack exchange,提问作者ucef

火山引擎 最新活动