我正在为我的基于表的用户界面实现MUI X数据网格组件.但是,我有一个特定的要求,我需要将表格单元格与行级关联,而不是传统的列级关联.

默认情况下,MUI X数据网格以基于列的方式运行,其中每个单元格都属于特定的列.然而,在我的例子中,我希望定制行为,以便每个单元格都对应于一行.这意味着我希望为每一行呈现自定义单元格组件,并且这些组件应该知道相应的行数据.

我试图浏览官方文档并搜索示例,但我没有找到任何直接满足这一特定需求的内置选项或配置.

有人能指导我如何使用MUI X数据网格实现这种行级单元格关联吗?是否有任何可用的props 、挂钩或方法可用于此目的?如果不是,定制表单元格行为的最佳方法是什么?

Mui X Data Grid Orientation

推荐答案

通过自定义单元格呈现,您可以实现这种行级单元格与MUI X数据网格的关联.这允许您定义将为网格中的每个单元格呈现的自定义组件.

为此,您需要向每一行传递一些额外的数据,例如单元格组件的第typecolor.例如,您可以有不同类型的单元格组件,如buttoninputselecttext.您还可以 for each 单元格组件使用不同的 colored颜色 ,例如primarysecondarydefault.

然后,您需要创建一个定制单元格组件,该组件将根据行数据的类型和 colored颜色 呈现不同的元素.例如,您可以使用ButtonTextFieldSelectTypography等MUI组件.您还可以使用诸如valuefield之类的props 来访问单元格值和字段名称.

最后,您需要将自定义单元格组件传递给网格中每列的renderCellprops .这将覆盖单元格的默认呈现,并使用您的自定义组件.

例如:

const CustomCell = ({ row: { type, color }, value, field, ...rest }) => {
  if (field === "id") {
    return <Typography justifyContent="center">{value}</Typography>;
  } else if (type === "button") {
    return (
      <Button fullWidth variant="contained" color={color}>
        {value}
      </Button>
    );
  } else if (type === "input") {
    return (
      <TextField fullWidth color={color} size="small" defaultValue={value} />
    );
  } else if (type === "select") {
    return (
      <Select fullWidth color={color} size="small" defaultValue={value}>
        <MenuItem value=""></MenuItem>
        <MenuItem value={0}>0</MenuItem>
        <MenuItem value={1}>1</MenuItem>
        <MenuItem value={2}>2</MenuItem>
      </Select>
    );
  } else {
    return <Typography color={color}>{value}</Typography>;
  }
};

const rows = [
  {
    id: 1,
    type: "button",
    color: "primary",
    firstName: "a",
    lastName: "a",
    gender: "a"
  },
  {
    id: 2,
    type: "input",
    color: "primary",
    firstName: "a",
    lastName: "a",
    gender: "a"
  }
]

return (
  <DataGrid
    rows={rows}
    columns={columns.map((column) => ({
      ...column,
      renderCell: (props) => <CustomCell {...props} />
    }))}
  />
);

您可以在这里看到整个示例:codesandbox.io

Reactjs相关问答推荐

MUImaterial -ui-如何将文本字段和 Select 分组?

在迁移到Redux—Toolkit 2.0和Redux5.0之后,我在extraReducer和Slice方面有点挣扎,

从app.js导航,这是在BrowserRouter包装之外

Reaction Native:在初始获取后,Reducer变为未定义

Reaction路由的问题-在Effect使用API调用响应设置状态之前呈现页面

如何在react组件中使用formik进行验证

替换谷歌 map api默认信息窗口与自定义

如何在Reac.js中通过子组件和props 调用父组件函数?

防止在Reaction中卸载

基本react 应用程序正在触发两次Use Effect

使用自动播放的视频组件呈现登录页面时出现JEST测试错误

当我使用 Firebase Auth 在 React 中刷新主页时显示登录页面

无法设置 null 的属性(设置src)

React 应用程序可以嵌入到 PowerPoint 中吗?

使用登录保护 React 中的 SPA 应用程序 - 为什么这种方法不起作用?

如何从 React Redux store 中删除特定项目?

从一个获取 axios 请求(ReactJS)中删除默认参数

如何使图标适合 react-bootstrap 中的行元素

如何在自定义 JSX 元素上声明属性?

如何在 v6.4 中将 Auth0 提供程序与新的 createBrowsereRouter 一起使用?