如何在AG-Grid整行编辑时联动修改两个agSelectCellEditor的值?
AG-Grid整行编辑中联动两个agSelectCellEditor的实现
需求与问题
在AG-Grid Community的整行编辑模式下,两个字段使用agSelectCellEditor组件:
- 需要在编辑过程中监听第一个字段(Make)的选择变更,实时将第二个字段(Model)的选中值设为"Unknown"
- 尝试过
rowValueChanged和cellValueChanged事件,但这类事件仅在整行编辑保存后才会触发,无法满足实时联动需求 - AG-Grid官方文档未提及如何为
agSelectCellEditor绑定编辑过程中的变更事件,虽能获取单元格编辑器实例,但不清楚如何设置其值并同步下拉框显示
非官方可行方案(AG Grid 31适用)
以下是在AG Grid 31上验证有效的实现方式,核心逻辑在onRowEditingStarted回调中,通过直接操作编辑器内部元素和事件实现联动:
const gridOptions = { columnDefs: [ { field: "make", cellEditor: "agSelectCellEditor", cellEditorParams: { values: ["Porsche", "Toyota", "Ford", "AAA", "BBB", "CCC"], }, }, { field: "model", cellEditor: "agSelectCellEditor", cellEditorParams: { values: ["Unknown", "ModelA", "ModelB", "ModelC", "ModelD", "ModelE"], }, }, ], defaultColDef: { flex: 1, editable: true, cellDataType: false, }, editType: "fullRow", rowData: getRowData(), // 自定义获取数据的方法 onRowEditingStarted: () => { const influencingColumnField = "make"; let influencingColumnIndex = null; const influencedColumnField = "model"; let influencedColumnFieldIndex = null; const cols = gridApi.getEditingCells(); for (let i = 0; i < cols.length; i++) { if (cols[i].column.colId === influencingColumnField) { influencingColumnIndex = i; } else if (cols[i].column.colId === influencedColumnField) { influencedColumnFieldIndex = i; } } if ( influencingColumnIndex !== null && influencedColumnFieldIndex !== null ) { const editors = gridApi.getCellEditorInstances(); const selectA = editors[influencingColumnIndex]; const selectB = editors[influencedColumnFieldIndex]; selectA.eSelect.addEventListener("fieldValueChanged", (e) => { selectB.eSelect.setValue("Unknown"); }); } }, };
注意:该方案直接依赖AG Grid内部未公开的DOM元素(
eSelect)和事件(fieldValueChanged),不属于官方API范畴,后续版本可能失效,仅作为临时解决方案使用。
内容的提问来源于stack exchange,提问作者user23046335
相关产品推荐
相关产品推荐

