问题描述
因此,我要实现的功能类似于在使用ag-grid内置单元格编辑功能(其中行中的所有单元格都可编辑)时editType: "fullRow"
功能的工作方式。
我为此使用自定义cellRenderer而不是cellEditor组件的原因是,当编辑一行然后单击另一行时,我无法阻止cellFocus,这将导致编辑停止(我不想要的。)
因此,当您单击表每一行中的“编辑”按钮时,该行中的cellRenderers应该更新以显示输入。每当对这些输入中的任何一个进行更改(通过onBlur
)时,我都希望将该新值推送到处于我的react状态的数组中,将其称为editedFields
(状态位于ag-网格表)。
当前,我正在将editedFields
传递到columnDefs
,然后通过valueFormatter
传递到单元格渲染器中:
{
headerName: "Job #",field: "job_number",width: 100,valueFormatter: params => ({
editing: editRow && selectedRow.id === params.data.id,columnName: "job_number",editedFields,setEditedFields,selectedRow
}),cellRenderer: "textInputCellRenderer",suppressMenu: true
},
这是我的textInputCellRenderer
的样子:
const TextInputCellRenderer = params => {
const [input,setInput] = useState(params.value || "");
const {
editing,columnName,value
} = params.formatValue();
if (!editing) {
return <span>{params.value || value || ""}</span>;
}
return (
<input
value={input}
className="text-input-cell"
type="text"
onBlur={() => setEditedFields([...editedFields,{ [columnName]: input}])}
onChange={e => {
setInput(e.target.value);
}}
/>
);
};
问题是当我调用onBlur
时,它会导致ag-grid崩溃,并显示以下错误:TypeError: Cannot read property 'getId' of null at FocusController.onColumnEverythingChanged
每当进行编辑(每次更改setColumnDefs
时,为了获得每个{{1}中最新的editedFields
的内容而添加到editedFields
的调用中,就会开始发生这种情况}位于我们要更新的行中。在此之前,我将对单元格进行更改,并且textInputCellRenderer
将正确填充,但是如果我也对另一个单元格进行了更改,则该cellRenderer中的editedFields
将为空。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)