ag-grid顶部新增行后onCellEditingStopped取rowNode异常如何解决
问题根源
- 方法误用:
api.getRowNode()入参要求是行唯一ID(需通过getRowId配置自定义,未配置时ag-grid会按行初始加载顺序生成内部固定ID),而非动态变化的显示索引。你插入新行后原有行的显示索引更新,但内部ID不变,传入当前显示索引自然匹配到初始索引对应的旧行。
- 方法误用:
- 没必要手动查询:
onCellEditingStopped回调的event参数本身就携带了当前编辑行的rowNode、行数据等所有相关信息,不需要额外调用接口查询。
- 没必要手动查询:
解决方案
最优方案:直接使用回调自带的行节点
无需额外调用API,直接从事件参数中取行节点即可,100%避免匹配错误:
onCellEditingStopped: function(event) { const rowNode = event.rowNode; // 后续业务逻辑 }
需通过索引获取行的方案
如果你的业务场景确实需要通过显示索引查询行,调用对应索引查询接口即可:
onCellEditingStopped: function(event) { const rowNode = gridOptions.api.getDisplayedRowAtIndex(event.rowIndex); }
需使用getRowNode的方案
如果你需要用getRowNode查询行,首先给grid配置唯一行ID规则,避免ID冲突:
const gridOptions = { // 替换为你行数据中的唯一标识字段 getRowId: (params) => params.data.rowId, onCellEditingStopped: function(event) { const rowNode = gridOptions.api.getRowNode(event.data.rowId); } }
额外提示:你当前新增行的逻辑是复制最后一行数据插入顶部,请注意保证新增行的唯一ID和原有行不重复,否则会出现行数据绑定、更新异常的问题。
内容的提问来源于stack exchange,提问作者user2175783
相关产品推荐
相关产品推荐

