typescript 如何为MUI DataGrid中的每一行添加序列号?

g9icjywg  于 2023-04-07  发布在  TypeScript
关注(0)|答案(4)|浏览(443)

首先,从服务器请求一些数据。然后我想添加一些数据。数据值中没有ID,但表单需要显示序列号。

const columns: GridColDef[] = [
        { 
            field: 'id' , 
            headerName: 'number', 
            filterable: false,
            renderCell:(index:any) => `${index + 1}`
        },
        { field: 'code' , headerName: ' code' },
        { field: 'type' , headerName: ' type' },
  ]
<DataGrid rows={row} columns={columns} />

但是index是Nan,当我添加一个新数据时,我如何在表中的每一行生成一个序列号?

zpgglvta

zpgglvta1#

我们可以通过使用getRowIndex方法来实现这一点。getRowIndex方法将文件名作为参数,并返回该文件所属行的索引。因此技巧是向该方法传递一个唯一的字段。
您的问题的解决方案看起来像这样:

  • 列字段:*
{
        field: 'id' , 
        headerName: 'number', 
        filterable: false,
        renderCell:(index) => index.api.getRowIndex(index.row.code)
    }
  • 数据网格:*
<DataGrid rows={row} columns={columns} getRowId= {(row) => row.code}/>

在上面的例子中,我假设代码是一个唯一的字段。如果很难有一个唯一的字段,你可以生成一个代码,类型等组合的字段。
在这种情况下,您的解决方案看起来像这样:

  • 列字段:*
{
        field: 'id' , 
        headerName: 'number', 
        filterable: false,
        renderCell:(index) => index.api.getRowIndex(index.row.code + '_' + index.row.type)
    }
  • 数据网格:*
<DataGrid rows={row} columns={columns} getRowId= {(row) => row.code + '_' + row.type}/>
anauzrmj

anauzrmj2#

我可以通过从API调用getRowIndex来获取行索引:

renderCell: (index) => index.api.getRowIndex(index.row.id) + 1,

以你为例:

const columns: GridColDef[] = [
        { 
            field: 'id' , 
            headerName: 'number', 
            filterable: false,
            renderCell: (index) => index.api.getRowIndex(index.row.id) + 1,
        },
        { field: 'code' , headerName: ' code' },
        { field: 'type' , headerName: ' type' },
  ]

如果一个列有sortable: true,那么这个索引号不会改变,不管该列如何排序-它总是第一行项目为1,第二行项目为2,依此类推。
同样,对于启用分页的网格,索引将基于页面进行匹配(即:如果每页有5个行项目,则不管排序如何,第一行项目在第1页上总是1,在第2页上总是6,等等)。

4zcjmb1e

4zcjmb1e3#

我假设之前的一些答案在他们改变API之前是有效的。
就我个人而言,我最近才开始使用MUI DataGrid组件。
我的答案与前面的答案非常相似。
getRowIndex6.0.2中不存在。
我能找到的唯一API方法是getRowIndexRelativeToVisibleRows,它似乎可以做到这一点(尽管“相对于可见行”确实让我有点担心):

// ...

      {
        sortable: true,
        field: 'lineNo',
        headerName: '#',
        flex: 0,
        editable: false,
        renderCell: (params: GridRenderCellParams<DatasetEntryEntity>) =>
          params.api.getRowIndexRelativeToVisibleRows(params.row.id) + 1,
      },
// ...

i7uaboj4

i7uaboj44#

你可以使用renderCell方法,它的prop有一个id键,它对每一行都是唯一的。它看起来像这样。

renderCell: (params) => {
   return (<h1>
            {'serial Number:', params.id}
           </h1>);
        }

你也可以使用npm包nanoid为每一行生成一个唯一的id。

相关问题