我正在使用 MUI DataGrid,我想打开特定行的可编辑性并专注于它。我用的是社区版的DataGrid,有什么办法吗?还是仅在 data-grid-x 版本中?
如何在 DataGrid 中使用 onClick 事件开始编辑和聚焦一行
IT技术
reactjs
material-ui
2021-05-04 05:58:21
1个回答
根据docs,DataGrid如果发生以下交互,则切换到编辑模式:
- A 回车键
- 退格键或删除键。它还将删除该值并立即停止编辑模式。
- 任何可打印键的按下键,例如 a、E、0 或 $ 双击单元格 A 调用
apiRef.current.setCellMode(id, field, 'edit').
如果您使用的是row编辑,则条件略有不同:
- 转义键。它还将回滚行中所做的更改。
- A 输入按键。它还将保存并转到同一列下一行的单元格。
- 在行外单击鼠标
- 调用 apiRef.current.setRowMode(id, 'view')。
以编程方式进入编辑模式的唯一方法是使用命令式 API setCellMode,不幸的是,这是一项高级功能。下面的示例向您展示了如何在用户单击单元格时开始编辑(DataGridPro仅限):
const apiRef = useGridApiRef();
const [editMode, setEditMode] = React.useState<GridEditMode>('cell');
const [editingCell, setEditingCell] = React.useState();
return (
<div style={{ width: '100%' }}>
<div style={{ height: 400, width: '100%' }}>
<Button
onClick={() => setEditMode((m) => (m === 'cell' ? 'row' : 'cell'))}
>
edit mode: {editMode}
</Button>
<DataGridPro
apiRef={apiRef}
rows={rows}
columns={columns}
editMode={editMode}
onCellClick={({ id, field }) => {
setEditingCell({ id, field });
if (editingCell) {
apiRef.current.setCellMode(editingCell.id, editingCell.field, 'view');
}
apiRef.current.setCellMode(id, field, 'edit');
}}
onSelectionModelChange={(ids) => {
if (editMode === 'row') apiRef.current.setRowMode(ids[0], 'edit');
}}
/>
</div>
</div>
);