如何在 DataGrid 中使用 onClick 事件开始编辑和聚焦一行

IT技术 reactjs material-ui
2021-05-04 05:58:21

我正在使用 MUI DataGrid,我想打开特定行的可编辑性并专注于它。我用的是社区版的DataGrid,有什么办法吗?还是仅在 data-grid-x 版本中?

1个回答

根据docsDataGrid如果发生以下交互,则切换到编辑模式:

  • 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>
);

现场演示

代码沙盒演示