跳至內容
+

資料格 - 主從式明細

展開您的列以顯示額外資訊。

主從式明細功能允許展開列,以在面板內顯示額外資訊。若要使用此功能,請將函數傳遞至 getDetailPanelContent prop,並帶有要在面板內呈現的內容。任何有效的 React 元素都可以用作列明細,甚至是另一個格線。

預設情況下,明細面板高度為 500 像素。您可以透過將函數傳遞至 getDetailPanelHeight prop 來自訂高度。此函數必須傳回數字或 "auto" 字串。如果傳回數字,則面板將使用該值(以像素為單位)作為高度。如果傳回 "auto",則高度將從內容推導而來。

<DataGridPro
  getDetailPanelContent={({ row }) => <div>Row ID: {row.id}</div>}
  getDetailPanelHeight={({ row }) => 100} // Optional, default is 500px.
/>

// or

<DataGridPro
  getDetailPanelContent={({ row }) => <div>Row ID: {row.id}</div>}
  getDetailPanelHeight={({ row }) => 'auto'} // Height based on the content.
/>

若要展開列,請點擊 + 圖示或在明細切換欄內按下 空白鍵。將 nullundefined 作為 getDetailPanelContent 的值傳回,將會阻止對應的列被展開。

從內容推導高度

動態列高度類似,您也可以從其內容推導明細面板高度。為此,請將函數傳遞至 getDetailPanelHeight prop,傳回 "auto",如下所示

<DataGridPro getDetailPanelHeight={() => 'auto'} />

以下範例示範了此選項的實際應用

控制展開的明細面板

若要控制展開哪些列,請將列 ID 列表傳遞至 detailPanelExpandedRowIds prop。將回呼傳遞至 onDetailPanelExpandedRowIds prop 可用於偵測列何時展開或摺疊。

另一方面,如果您只想使用一些已展開的列初始化資料格,請如下所示使用 initialState prop

<DataGridPro initialState={{ detailPanel: { expandedRowIds: [1, 2, 3] } }}>

延遲載入明細面板內容

您不需要預先提供明細面板的內容。相反地,您可以在列展開時延遲載入它。

在以下範例中,DetailPanelContent 組件在掛載時提取資料。此組件由 getDetailPanelContent prop 用於呈現明細面板內容。

將明細面板用作表單

作為內建列編輯的替代方案,可以在明細面板內呈現表單組件,允許使用者編輯目前列的值。

以下示範顯示與 react-hook-form 的整合,但也支援其他表單庫。

自訂明細面板切換

若要變更用於切換的圖示,您可以為圖示插槽提供不同的組件,如下所示

<DataGridPro
  slots={{
    detailPanelExpandIcon: CustomExpandIcon,
    detailPanelCollapseIcon: CustomCollapseIcon,
  }}
/>

如果這還不夠,則可以覆寫整個切換組件。若要完全自訂它,請將另一個欄與 field: GRID_DETAIL_PANEL_TOGGLE_FIELD 新增至您的欄集合。格線將偵測到已定義切換欄,並且不會在預設位置新增另一個切換。新的切換組件可以透過renderCell在與任何其他欄相同的方式下提供。僅設定 field,由您自行設定其餘選項(例如停用欄選單、篩選、排序)。若要從一些建議的設定選項開始,請在定義欄時展開 GRID_DETAIL_PANEL_TOGGLE_COL_DEF

<DataGridPro
  columns={[
    {
      field: GRID_DETAIL_PANEL_TOGGLE_FIELD,
      renderCell: (params) => <CustomDetailPanelToggle {...params} />
    },
  ]}
/>

// or

<DataGridPro
  columns={[
    {
      ...GRID_DETAIL_PANEL_TOGGLE_COL_DEF, // Already contains the right field
      renderCell: (params) => <CustomDetailPanelToggle {...params}>
    },
  ]}
/>

此方法也可用於變更切換欄的位置,如下所示。

明細面板欄的自訂標頭

若要為明細面板欄呈現自訂標頭,請在欄定義中使用 renderHeader 屬性。此屬性接收一個 GridRenderHeaderParams 物件,其中包含 colDef(欄定義)和 field。以下範例示範如何為明細面板欄呈現自訂標頭

const columns = [
  {
    ...GRID_DETAIL_PANEL_TOGGLE_COL_DEF,
    renderHeader: (params) => (
      <div>
        <span>{params.colDef.headerName}</span>
        <button onClick={() => console.log('Custom action')}>Custom action</button>
      </div>
    ),
  },
  //... other columns
];

停用明細面板內容滾動

預設情況下,明細面板的寬度是所有欄寬度的總和。這表示當存在水平滾動條時,滾動它也會滾動面板內容。若要避免此行為,請將明細面板的大小設定為資料格的外部大小。使用 apiRef.current.getRootDimensions() 來取得最新的尺寸值。最後,為了防止面板滾動,請設定 position: stickyleft: 0

以下示範顯示如何達成此目的。請注意,切換欄已釘選,以確保在水平滾動資料格時始終可見。

範例

有關如何自訂明細面板的更多範例

apiRef

格線公開了一組方法,可使用命令式 apiRef 啟用所有這些功能。若要了解更多關於如何使用它的資訊,請查看 API 物件 章節。

簽名
getExpandedDetailPanels: () => GridRowId[]
簽名
setExpandedDetailPanels: (ids: GridRowId[]) => void
簽名
toggleDetailPanel: (id: GridRowId) => void