跳到内容
+

数据表格 - 列固定

固定列以使其始终可见。

固定的(或冻结的、锁定的或粘性的)列是指用户水平滚动数据表格时始终可见的列。它们可以固定在左侧或右侧,并且不能重新排序。

要固定列,有几种方法

  • 使用 initialState 属性
  • 控制 pinnedColumnsonPinnedColumnsChange 属性
  • 列菜单中的专用按钮
  • 访问 命令式 API

初始化固定的列

要通过 initialState 设置固定的列,请将具有以下形状的对象传递给此属性

interface GridPinnedColumnFields {
  left?: string[]; // Optional field names to pin to the left
  right?: string[]; // Optional field names to pin to the right
}

以下演示说明了此方法的工作原理

Enter 开始编辑

控制固定的列

虽然 initialState 属性仅在初始化期间用于设置固定的列,但 pinnedColumns 属性允许您随时修改哪些列被固定。传递给它的值遵循先前方法中的相同形状。将其与 onPinnedColumnsChange 一起使用,以了解何时固定或取消固定列。

Enter 开始编辑

禁用列固定

对于所有列

默认情况下启用列固定,但您可以通过设置 disableColumnPinning 属性轻松禁用此功能。

<DataGridPro disableColumnPinning />

对于某些列

要禁用单个列的固定,请在 GridColDef 中将 pinnable 属性设置为 false

<DataGridPro columns={[{ field: 'id', pinnable: false }]} /> // Default is `true`.

以编程方式固定不可固定的列

可能需要允许以编程方式固定或取消固定一个或多个在 UI 上无法固定或取消固定的列(即属性 disableColumnPinning = truecolDef.pinnable = false 的列)。这可以通过以下方式之一完成。

  • (A)初始化固定的列
  • (B)控制固定的列
  • (C)使用 API 方法 setPinnedColumns 设置固定的列
// (A) Initializing the pinning
<DataGridPro
  disableColumnPinning
  initialState={{ pinnedColumns: { left: ['name'] } }}
/>

// (B) Controlling the pinned columns
<DataGridPro
  disableColumnPinning
  pinnedColumns={{ left: ['name'] }}
/>

// (C) Using the API method `setPinnedColumns` to set the pinned columns
<React.Fragment>
  <DataGridPro disableColumnPinning />
  <Button onClick={() => apiRef.current.setPinnedColumns({ left: ['name'] })}>
    Pin name column
  </Button>
</React.Fragment>

以下演示使用方法 (A) 初始化固定列的状态,即使禁用固定功能,也会固定列 name

Enter 开始编辑

固定复选框选择列

要固定使用 checkboxSelection 添加的复选框列,请将 GRID_CHECKBOX_SELECTION_COL_DEF.field 添加到固定的列列表中。

Enter 开始编辑

与动态行高一起使用

您可以同时启用固定列和动态行高。但是,如果行在初始计算后更改其内容,您可能需要触发手动重新计算以避免不正确的测量。您可以通过每次内容更改时调用 apiRef.current.resetRowHeights() 来执行此操作。

以下演示包含启用这两个功能的示例

Enter 开始编辑

apiRef

网格公开了一组方法,可以使用命令式 apiRef 启用所有这些功能。要了解有关如何使用它的更多信息,请查看 API 对象 部分。

签名
getPinnedColumns: () => GridPinnedColumnFields
签名
isColumnPinned: (field: string) => GridPinnedColumnPosition | false
签名
pinColumn: (field: string, side: GridPinnedColumnPosition) => void
签名
setPinnedColumns: (pinnedColumns: GridPinnedColumnFields) => void
签名
unpinColumn: (field: string) => void