页面大小
Data Grid(MIT 许可证)限制为最多 100 行的页面。如果您想要更大的页面,您需要升级到 Pro 计划 或更高级别。
默认情况下,每个页面包含 100 行。用户可以通过页脚中的选择器更改页面大小。
页面大小选项
您可以使用 pageSizeOptions 属性自定义 “每页行数” 选择器中显示的选项。您应该提供一个项目数组,每个项目应为以下类型之一
number,每个数字将用于选项的标签和值。
<DataGrid pageSizeOptions={[5, 10, 25]}>object,
value和label键将分别用于选项的值和标签。将value定义为-1以显示所有结果。<DataGrid pageSizeOptions={[10, 100, { value: 1000, label: '1,000' }, { value: -1, label: 'All' }]}>
自动页面大小
使用 autoPageSize 属性自动缩放 pageSize 以匹配容器高度和无需垂直滚动条即可显示的最大行数。
分页模型
分页模型是一个对象,包含当前页面和页面大小。默认值为 { page: 0, pageSize: 100 }。要更改默认值,使其由 paginationModel 属性控制,或使用 initialState.pagination.paginationModel 初始化自定义值。
初始化分页模型
要在不控制分页模型的情况下初始化它,请将 paginationModel 提供给 initialState 属性。如果您没有为其中一个属性提供值,则将使用默认值。
<DataGrid
initialState={{
pagination: {
paginationModel: { pageSize: 25, page: 0 },
},
}}
/>
受控分页模型
传递 paginationModel 属性以控制网格的大小和当前页面。您可以使用 onPaginationModelChange 属性来监听 paginationModel 的更改并相应地更新属性。
const [paginationModel, setPaginationModel] = React.useState({
pageSize: 25,
page: 0,
});
<DataGrid
paginationModel={paginationModel}
onPaginationModelChange={setPaginationModel}
/>;
服务端分页
默认情况下,分页在客户端处理。这意味着您必须将所有页面的行提供给数据表格。如果您的数据集太大,并且您想按需获取页面,则可以使用服务端分页。
一般来说,服务端分页可以分为两种类型
- 基于索引的分页
- 基于游标的分页
基于索引的分页
基于索引的分页使用 page 和 pageSize 从服务器逐页获取数据。
要启用服务端分页,您需要
- 将
paginationMode属性设置为server - 使用
onPaginationModelChange属性来响应页面更改并从服务器加载数据
服务端分页可以根据总行数或 rowCount 的可用性进一步细分为子类型。
数据表格使用 rowCount 来计算页数,并在页脚中显示有关分页当前状态的信息。您可以通过以下方式之一提供 rowCount
- 初始化。 使用
initialState.pagination.rowCount属性初始化rowCount。 - 控制。 将
rowCount属性与onRowCountChange一起使用以控制rowCount,并在行数更新时反映更改。 - 使用 API 设置。 在网格初始化后,使用
apiRef.current.setRowCount方法设置rowCount。
关于服务端 rowCount 的可用性,可能存在三种不同的可能性
- 行数可用(已知)
- 行数不可用(未知)
- 行数可用但不准确,可能会在稍后更新(估计)
您可以配置 rowCount、paginationMeta.hasNextPage 和 estimatedRowCount 属性来处理上述场景。
rowCount |
paginationMeta.hasNextPage |
estimatedRowCount |
|
|---|---|---|---|
| 已知行数 | 数字 |
— | — |
| 未知行数 | -1 |
布尔值 |
— |
| 估计行数 | -1 |
布尔值 |
数字 |
已知行数
按照上表中的说明,将属性传递给数据表格,以处理实际行数已知的情况,如以下示例所示。
未知行数
按照上表中的说明,将属性传递给数据表格,以处理实际行数未知的情况,如以下示例所示。
估计行数
估计行数可以被认为是 “已知行数” 和 “未知行数” 用例之间切换的混合方法。
最初,当设置了 estimatedRowCount 且 rowCount={-1} 时,数据表格的行为类似于 “未知行数” 用例,但在分页页脚中显示 estimatedRowCount 值。
如果加载的行数超过 estimatedRowCount,则数据表格将忽略 estimatedRowCount,并且行为与 “未知行数” 用例相同。
当 hasNextPage 返回 false 或 rowCount 设置为正数时,数据表格将切换到 “已知行数” 行为。
在以下示例中,实际行数为 1000,但数据表格最初提供的是 estimatedRowCount={100}。您可以通过按 “设置行数” 按钮将 rowCount 设置为实际行数。
基于游标的分页
您还可以处理具有基于游标的分页的服务器。为此,您只需跟踪与您获取的每个页面关联的下一个游标。
自定义分页 UI
您可以按照文档的组件部分自定义页脚中分页的渲染。
apiRef
数据表格公开了一组方法,可以使用命令式 apiRef 启用所有这些功能。要了解有关如何使用它的更多信息,请查看 API 对象 部分。
setPage()
将显示的页面设置为 page 给定的值。
签名
setPage: (page: number) => voidsetPageSize()
将显示的行数设置为 pageSize 给定的值。
签名
setPageSize: (pageSize: number) => voidsetPaginationMeta()
将 paginationMeta 设置为新值。
签名
setPaginationMeta: (paginationMeta: GridPaginationMeta) => voidsetPaginationModel()
将 paginationModel 设置为新值。
签名
setPaginationModel: (model: GridPaginationModel) => voidsetRowCount()
将 rowCount 设置为新值。
签名
setRowCount: (rowCount: number) => voidgridPageCountSelector
如果启用了分页,则获取显示所有行所需的页数签名
gridPageCountSelector: (apiRef: GridApiRef) => number
// or
gridPageCountSelector: (state: GridState, instanceId?: number) => number示例
gridPageCountSelector(apiRef)
// or
gridPageCountSelector(state, apiRef.current.instanceId)gridPageSelector
如果启用了分页,则获取要渲染的页面的索引签名
gridPageSelector: (apiRef: GridApiRef) => number
// or
gridPageSelector: (state: GridState, instanceId?: number) => number示例
gridPageSelector(apiRef)
// or
gridPageSelector(state, apiRef.current.instanceId)gridPageSizeSelector
如果启用了分页,则获取单页上显示的最大行数签名
gridPageSizeSelector: (apiRef: GridApiRef) => number
// or
gridPageSizeSelector: (state: GridState, instanceId?: number) => number示例
gridPageSizeSelector(apiRef)
// or
gridPageSizeSelector(state, apiRef.current.instanceId)gridPaginatedVisibleSortedGridRowEntriesSelector
如果启用了分页,则获取当前页中包含的每一行的 id 和模型。签名
gridPaginatedVisibleSortedGridRowEntriesSelector: (apiRef: GridApiRef) => GridRowEntry<GridValidRowModel>[]
// or
gridPaginatedVisibleSortedGridRowEntriesSelector: (state: GridState, instanceId?: number) => GridRowEntry<GridValidRowModel>[]示例
gridPaginatedVisibleSortedGridRowEntriesSelector(apiRef)
// or
gridPaginatedVisibleSortedGridRowEntriesSelector(state, apiRef.current.instanceId)gridPaginatedVisibleSortedGridRowIdsSelector
如果启用了分页,则获取当前页中包含的每一行的 id。签名
gridPaginatedVisibleSortedGridRowIdsSelector: (apiRef: GridApiRef) => GridRowId[]
// or
gridPaginatedVisibleSortedGridRowIdsSelector: (state: GridState, instanceId?: number) => GridRowId[]示例
gridPaginatedVisibleSortedGridRowIdsSelector(apiRef)
// or
gridPaginatedVisibleSortedGridRowIdsSelector(state, apiRef.current.instanceId)gridPaginationMetaSelector
获取分页元数据签名
gridPaginationMetaSelector: (apiRef: GridApiRef) => GridPaginationMeta
// or
gridPaginationMetaSelector: (state: GridState, instanceId?: number) => GridPaginationMeta示例
gridPaginationMetaSelector(apiRef)
// or
gridPaginationMetaSelector(state, apiRef.current.instanceId)gridPaginationModelSelector
获取分页模型签名
gridPaginationModelSelector: (apiRef: GridApiRef) => GridPaginationModel
// or
gridPaginationModelSelector: (state: GridState, instanceId?: number) => GridPaginationModel示例
gridPaginationModelSelector(apiRef)
// or
gridPaginationModelSelector(state, apiRef.current.instanceId)gridPaginationRowCountSelector
获取行数签名
gridPaginationRowCountSelector: (apiRef: GridApiRef) => number
// or
gridPaginationRowCountSelector: (state: GridState, instanceId?: number) => number示例
gridPaginationRowCountSelector(apiRef)
// or
gridPaginationRowCountSelector(state, apiRef.current.instanceId)gridPaginationRowRangeSelector
如果启用了分页,则获取当前页中包含的第一行和最后一行索引。签名
gridPaginationRowRangeSelector: (apiRef: GridApiRef) => { firstRowIndex: number; lastRowIndex: number } | null
// or
gridPaginationRowRangeSelector: (state: GridState, instanceId?: number) => { firstRowIndex: number; lastRowIndex: number } | null示例
gridPaginationRowRangeSelector(apiRef)
// or
gridPaginationRowRangeSelector(state, apiRef.current.instanceId)gridVisibleRowsSelector
获取筛选和排序后的行、范围和 rowIndex 查找表。不包含折叠的子项。签名
gridVisibleRowsSelector: (apiRef: GridApiRef) => { rows: GridRowEntry<GridValidRowModel>[]; range: { firstRowIndex: number; lastRowIndex: number } | null; rowToIndexMap: Map<GridValidRowModel, number> }
// or
gridVisibleRowsSelector: (state: GridState, instanceId?: number) => { rows: GridRowEntry<GridValidRowModel>[]; range: { firstRowIndex: number; lastRowIndex: number } | null; rowToIndexMap: Map<GridValidRowModel, number> }示例
gridVisibleRowsSelector(apiRef)
// or
gridVisibleRowsSelector(state, apiRef.current.instanceId)