Documentation

@kanunilabs/datagrid-react-enterprise


@kanunilabs/datagrid-react-enterprise / EnterpriseDataGridProps

Interface: EnterpriseDataGridProps<TRow>

Extends

  • DataGridProps<TRow>

Type Parameters

TRow

TRow = GridRowData

Properties

alignedGrids?

optional alignedGrids?: string

Keep this grid's COLUMN LAYOUT and horizontal scroll in step with every other grid given the same name (gap analysis P3.2).

For two grids that have to read as one table — a scrolling body with a fixed totals strip under it, or a master and a detail over the same columns. Resize, move, hide or pin a column in one and the others follow; scroll one sideways and the others keep pace.

Sort, filter, selection and VERTICAL scroll deliberately do not travel. Aligned grids share a shape, not a result — a summary strip that re-sorted itself because the grid above it did would be answering a different question. Columns the peer does not have are ignored, so a three-column strip can align under a twelve-column grid.

Inherited from

DataGridProps.alignedGrids


announcements?

optional announcements?: boolean

Announcements for screen readers (sort/filter/selection). Defaults on.

Inherited from

DataGridProps.announcements


asyncTransactionWait?

optional asyncTransactionWait?: number

Milliseconds applyTransactionAsync waits before applying a batch (gap analysis P3.6). Default 50 — about three frames.

Raise it for a feed that ticks faster than the eye can follow; the grid then repaints less often and each pass carries more. Lower it only if the grid must visibly track something else on screen tick for tick.

Inherited from

DataGridProps.asyncTransactionWait


autoColumns?

optional autoColumns?: boolean | InferColumnsOptions

Tunes the columns derived from the data when columns is omitted: sampleSize, include, exclude, humanizeHeaders, defaults. false turns the derivation off and leaves the grid with no columns.

Inherited from

DataGridProps.autoColumns


autoSizeStrategy?

optional autoSizeStrategy?: "none" | "fitGrid" | "fitCells"

What to do with the column widths once the grid knows how much room it has (gap analysis P2.5). Default 'none' — the configured widths are used as written, which is what every existing grid already does.

  • 'fitGrid' spreads the columns across the width so they fill it exactly, proportionally to their configured widths, re-applied when the grid is resized. For a grid that should never show empty canvas or a horizontal scrollbar.
  • 'fitCells' measures the rendered content and sizes each column to it — the "best fit" the header menu offers, applied once to every column after the first rows paint. It can overflow the grid; that is the point.

A user resize is not undone by either: 'fitGrid' re-runs on a GRID resize and takes the current widths as its proportions, so a column the user made wider stays proportionally wider.

Inherited from

DataGridProps.autoSizeStrategy


cellMenu?

optional cellMenu?: boolean | CellMenuOptions

The grid's OWN cell-menu entries — clipboard and export — appended below whatever rowMenu supplies. See CellMenuOptions.

On by default: a right-click that offers no way to copy the cell is the gap this closes, and an app that wants the menu bare passes false. rowMenu is untouched either way — an app's items keep the order it wrote them in, and the built-ins read as an addition after a separator.

Inherited from

DataGridProps.cellMenu


charting?

optional charting?: boolean | ChartingOptions

Charting. true adds a "Chart" toolbar button and a "Chart by this column" entry to the header menu; the panel then docks above the grid.

The COLUMNS offered in the pickers are derived from the grid's own column model, so there is nothing to keep in sync by hand.


className?

optional className?: string

Inherited from

DataGridProps.className


columnReorder?

optional columnReorder?: boolean

Drag a header onto another header to change the column order. Default on.

Inherited from

DataGridProps.columnReorder


columnResize?

optional columnResize?: boolean

Width drag handle on each header's trailing edge; double-click best-fits. Default on.

Inherited from

DataGridProps.columnResize


columns?

optional columns?: ReactGridColumnDef<TRow>[]

Optional: with an ARRAY data source and no columns, one column per field is derived from the data (see autoColumns). A remote DataSource must declare them — there is nothing to sample before the first fetch.

Inherited from

DataGridProps.columns


dark?

optional dark?: boolean

Applies the packaged dark palette.

Inherited from

DataGridProps.dark


dataSource

dataSource: TRow[] | DataSource<TRow>

Inherited from

DataGridProps.dataSource


debugMode?

optional debugMode?: boolean

Console diagnostics for integration mistakes (duplicate keys, unknown columns…).

Inherited from

DataGridProps.debugMode


defaultColumnDef?

optional defaultColumnDef?: Partial<GridColumnDef<TRow>>

Inherited from

DataGridProps.defaultColumnDef


density?

optional density?: GridDensity

Vertical rhythm preset. Resolves to a row height, header height, font size and cell padding. An explicit rowHeight still wins — density is a shorthand, not an override.

Inherited from

DataGridProps.density


editing?

optional editing?: EditingOptions<TRow>


emptyText?

optional emptyText?: string

Shown when the pipeline yields no rows.

Inherited from

DataGridProps.emptyText


enterpriseEdition?

optional enterpriseEdition?: boolean

Unlocks the Enterprise edition. Set by EnterpriseDataGrid — an app rendering DataGrid directly leaves it off.

The engine keeps every capability either way: the pipeline (filter → sort → group → aggregate) is one piece, and an edition boundary cutting through it would be a fork rather than a gate. What this flag decides is what the COMPONENT agrees to switch on. See gateEdition for the removals and DataGridController.setEnterpriseEdition for the imperative half.

Off, the following are declined (each says why under debugMode): multi-level grouping (capped at one level), grouping.groupSummaries, masterDetail, tree, summaries (footer column totals), column spanRows, notes, Excel and PDF export. A server-side DataSource THROWS rather than being stripped — an empty grid sends the developer hunting in their backend.

Community keeps: virtual scrolling at a million rows, worker offload, sorting, the column family, filtering, selection, pagination, single-level grouping, CSV export, themes, 12 locales and the whole event/imperative API. Boundary set with the user on 2026-08-14 against AG Grid's own line.

Inherited from

DataGridProps.enterpriseEdition


filterBuilder?

optional filterBuilder?: boolean

Adds a strip above the grid with the nested AND/OR filter builder.


filterDebounce?

optional filterDebounce?: number

Milliseconds to wait after the last keystroke before applying a filter-row value. 0 applies on every keystroke.

Defaults to 0 for client data (filtering is local and instant — adding a delay to something already immediate would be a regression in feel) and 200 for a remote DataSource, where each keystroke is a network round trip: typing "Marmara" used to open seven queries, six of them already superseded by the time they answered.

Set it explicitly on a very large CLIENT grid, where one pass is expensive enough that coalescing keystrokes is worth a short delay.

Enter, or moving focus out of the box, always applies immediately.

Inherited from

DataGridProps.filterDebounce


filterIconMode?

optional filterIconMode?: "always" | "hover"

When the funnel is visible. 'hover' (default) keeps the header clean and reveals it on hover or keyboard focus; 'always' pins it. A column that is actually filtered always shows its funnel, in either mode.

Inherited from

DataGridProps.filterIconMode


filterPanel?

optional filterPanel?: boolean | "always"

A bar under the footer stating the active filter in words, with a checkbox that suspends it and an × that removes it — the DevExpress cxGrid filter panel.

true shows it only while something is filtered; 'always' keeps it in place. It describes the FULL filter — the builder's conditions and every column funnel and filter-row entry, combined — which is what makes it the one place to read back why the grid is showing 12 of 100.000 rows.

Inherited from

DataGridProps.filterPanel


filterPanelLabels?

optional filterPanelLabels?: DescribeFilterOptions

Wording for the filter panel's sentence — and / or / is / blank

Inherited from

DataGridProps.filterPanelLabels


filterRow?

optional filterRow?: boolean

Text-input row under the header, one box per column.

Inherited from

DataGridProps.filterRow


focusedRow?

optional focusedRow?: boolean

Highlight the row holding focus. Distinct from selection: focus is where the keyboard is, selection is what an action applies to — a grid that conflates them cannot express "look at this row without selecting it".

Inherited from

DataGridProps.focusedRow


focusedRowKey?

optional focusedRowKey?: RowKey | null

Focus this row on mount / when the prop changes (controlled focus).

Inherited from

DataGridProps.focusedRowKey


optional footer?: boolean

Column-aligned totals row at the bottom of the grid. Defaults to on when summaries is non-empty. Turning it on with no summaries shows an empty row, which is how the user reaches the per-column aggregation menu.

Inherited from

DataGridProps.footer


footerMenu?

optional footerMenu?: boolean

Right-click (and click) on a footer cell opens the aggregation picker — Count / Sum / Average / Min / Max, filtered to what the column's data type supports. false makes the footer read-only.

Inherited from

DataGridProps.footerMenu


footerPosition?

optional footerPosition?: "top" | "bottom"

Which edge the grand total row sticks to (P2.8). Default 'bottom'.

Same row either way — the column-aligned totals over the filtered result, with the same aggregation menu. 'top' is for a grid read top-down, where the totals are the headline; the rows below are then the evidence for it.

Inherited from

DataGridProps.footerPosition


getCellClassName?

optional getCellClassName?: (ctx) => string | undefined

Extra class names per cell (dirty marker, range highlight, invalid).

Parameters

ctx

CellSlotContext<TRow>

Returns

string | undefined

Inherited from

DataGridProps.getCellClassName


getRowHeight?

optional getRowHeight?: (node, index) => number | undefined

Per-row height, in px. Return undefined for the standard height.

OPT-IN, and deliberately so: supplying it means the grid asks about every row in the view on every projection, which on a million rows is a million calls per filter keystroke. Leave it off and row geometry stays one multiplication — see RowHeightIndex. Detail panels and the edit form do NOT need this; they carry their own height.

For heights that depend on how text wraps, prefer autoHeight on the column: the adapter measures what it rendered instead of asking the app to predict it.

Parameters

node

RowNode<TRow>

index

number

Returns

number | undefined

Inherited from

DataGridProps.getRowHeight


gridId

gridId: string

Inherited from

DataGridProps.gridId


grouping?

optional grouping?: GroupingConfig

Inherited from

DataGridProps.grouping


groupPanel?

optional groupPanel?: boolean

Drop area above the grid for grouping by a column.

Inherited from

DataGridProps.groupPanel


headerFilter?

optional headerFilter?: boolean

Funnel button per header opening the distinct-value checklist popup.

Inherited from

DataGridProps.headerFilter


headerMenu?

optional headerMenu?: boolean | ((context, defaults) => GridMenuItem<HeaderMenuContext>[])

Right-click menu on COLUMN HEADERS: sort, group, footers, hide, field chooser, best fit. true (default) uses the built-in list; a function receives it and returns the list to show, so an app can drop items or append its own. false turns it off and lets the browser menu through.

Inherited from

DataGridProps.headerMenu


highlightSearch?

optional highlightSearch?: boolean

Mark the search term inside cell text (gap analysis P2.4). Default true.

The search already decides which rows survive; without the marks the user is left scanning fifteen columns for the reason a row is on screen. Only the grid's own rendering is marked up — a column with a renderCell owns its output and is left alone.

Inherited from

DataGridProps.highlightSearch


licenseKey?

optional licenseKey?: string


licenseOptions?

optional licenseOptions?: SetLicenseOptions


loadingOverlay?

optional loadingOverlay?: number | boolean

Overlay shown while the grid is busy, with a percentage where one exists. Default on. A number sets how many milliseconds of work must pass before it appears (default 300) — short operations finish without ever showing it.

Inherited from

DataGridProps.loadingOverlay


locale?

optional locale?: string

Locale for collation, date handling AND the interface language. Default 'en'. One of the twelve the grid ships (GRID_LOCALES); a regional tag narrows to its base (de-ATde), and anything unknown falls back to English rather than failing to render.

Inherited from

DataGridProps.locale


masterDetail?

optional masterDetail?: MasterDetailConfig

Expandable detail panels under rows. Enterprise (P9).

Inherited from

DataGridProps.masterDetail


messages?

optional messages?: Partial<GridDictionary>

Override individual strings without replacing the language.

Merged over the resolved dictionary, so an app can rename "Actions" to its own wording in every language while leaving the other 250 alone.

Inherited from

DataGridProps.messages


notes?

optional notes?: GridNotesConfig<TRow>

Cell notes (gap analysis P3.3) — user-written prose attached to a cell, marked with a corner triangle and revealed on hover. See GridNotesConfig.

Inherited from

DataGridProps.notes


onCellDoubleClick?

optional onCellDoubleClick?: (ctx) => void

Parameters

ctx

CellSlotContext<TRow>

Returns

void

Inherited from

DataGridProps.onCellDoubleClick


onCellPointerDown?

optional onCellPointerDown?: (ctx, event) => void

Pointer down on a cell, with the view coordinates the range engine needs.

Parameters

ctx

CellSlotContext<TRow>

event

MouseEvent

Returns

void

Inherited from

DataGridProps.onCellPointerDown


onCellPointerEnter?

optional onCellPointerEnter?: (ctx, event) => void

Parameters

ctx

CellSlotContext<TRow>

event

MouseEvent

Returns

void

Inherited from

DataGridProps.onCellPointerEnter


onFocusedRowChanged?

optional onFocusedRowChanged?: (event) => void

Fired when the focused ROW changes — not on every cell move within it.

Parameters

event
row?

TRow

rowKey

RowKey | null

Returns

void

Inherited from

DataGridProps.onFocusedRowChanged


onImport?

optional onImport?: (rows) => void

Adds an "Import…" button opening the mapping wizard. The callback receives rows already keyed by grid column id — the grid does NOT mutate the data source itself, because only the app knows whether to append, replace or post them to a server.

Parameters

rows

Record<string, unknown>[]

Returns

void


onOpenFilterBuilder?

optional onOpenFilterBuilder?: () => void

Opens the app's filter builder from the panel's chevron. Without it the chevron is not rendered, because a control that opens nothing is worse than no control. EnterpriseDataGrid wires this to its own builder.

Returns

void

Inherited from

DataGridProps.onOpenFilterBuilder


onReady?

optional onReady?: (controller) => void

Imperative access to the controller (§5.3) — search, filters, layout, export. Called once per controller instance; keep the callback stable (useCallback) or it will fire on every render.

Parameters

controller

DataGridController<TRow>

Returns

void

Inherited from

DataGridProps.onReady


onRowActivate?

optional onRowActivate?: (node) => void

Fired on Enter / double-click over the focused row.

Parameters

node

RowNode<TRow>

Returns

void

Inherited from

DataGridProps.onRowActivate


onRowClick?

optional onRowClick?: (node) => void

Parameters

node

RowNode<TRow>

Returns

void

Inherited from

DataGridProps.onRowClick


pagination?

optional pagination?: PaginationConfig

Inherited from

DataGridProps.pagination


palette?

optional palette?: GridPalette

A colour scheme, on top of whatever theme decides about structure — 'nord', 'dracula', 'solarized', 'gruvbox', 'catppuccin' or 'tokyo-night'.

Independent of theme, so the two multiply: Balham's dense ruled grid in Nord's blues, or Material's tall one in the same blues. Works with dark (each palette ships both), and without a theme it recolours the packaged default. Omit it and the theme's own colours apply.

Inherited from

DataGridProps.palette


pinnedBottomRows?

optional pinnedBottomRows?: readonly TRow[]

Rows fixed below the scrolling body. See pinnedTopRows.

Inherited from

DataGridProps.pinnedBottomRows


pinnedTopRows?

optional pinnedTopRows?: readonly TRow[]

Rows fixed above the scrolling body (P2.3) — a target line, last year's figures, a row the user pinned for comparison.

They are NOT data: never sorted, filtered, paged, selected or counted, and not included in an export. Everything visual is shared with a real row (columns, widths, pinned offsets, renderCell), so the two stay aligned. For totals over the grid's own rows, use summaries — that is what the footer row is.

Inherited from

DataGridProps.pinnedTopRows


printLayout?

optional printLayout?: boolean | PrintLayoutOptions

Print the whole grid instead of the screenful that happened to be visible (gap analysis P3.4). Off by default.

Virtualization is what makes a printed grid useless: the browser gets the twenty rows inside a clipped, fixed-height box and paginates those. With this on, beforeprint switches the grid to a mode that renders every row and lets the box grow, and afterprint puts it back — the user's scroll position and selection survive, because only the rendering changed.

{ always: true } stays in that mode permanently, for rendering a grid into a report page where there is no print dialog to react to.

{ maxRows } (default 5.000) is where it refuses. Print layout puts every row in the DOM; at a hundred thousand that is a frozen tab, which is worse than a short printout. Past the cap the grid prints what it always did and says so under debugModeexportPdf() is the tool at that size, and it streams.

Inherited from

DataGridProps.printLayout


remote?

optional remote?: RemoteConfig

Tuning for a remote DataSource (ignored for array data).

Inherited from

DataGridProps.remote


renderCellContent?

optional renderCellContent?: (ctx) => ReactNode

Replace a cell's content (e.g. with an editor). Return undefined for default.

Parameters

ctx

CellSlotContext<TRow>

Returns

ReactNode

Inherited from

DataGridProps.renderCellContent


renderDetail?

optional renderDetail?: (row) => ReactNode

Body of a row's detail panel. Required for the expander column to appear — together with masterDetail on the config.

Parameters

row

TRow

Returns

ReactNode

Inherited from

DataGridProps.renderDetail


renderEditForm?

optional renderEditForm?: (rowKey, row) => ReactNode

Body of the in-grid edit form (mode: 'form'), rendered in the row flow under the record it edits. Set by EnterpriseDataGrid; the form's position and height come from controller.setEditFormRow.

Parameters

rowKey

RowKey

row

TRow | undefined

Returns

ReactNode

Inherited from

DataGridProps.renderEditForm


renderOverlay?

optional renderOverlay?: () => ReactNode

Absolutely-positioned layer over the viewport (fill handle, watermark).

Returns

ReactNode

Inherited from

DataGridProps.renderOverlay


renderRow?

optional renderRow?: (ctx) => ReactNode

Replace each DATA row's content. Group headers and detail panels keep their own rendering — a template that had to handle those too would be a template of the whole grid.

The row ELEMENT stays: it carries the height, the aria indices and the click handlers the virtualizer and selection depend on. What the template replaces are the cells — so in-cell editing, range selection and the fill handle have nothing to attach to while it is on. For per-cell customization that keeps the column layout, use a column's renderCell.

Parameters

ctx

RowTemplateContext<TRow>

Returns

ReactNode

Inherited from

DataGridProps.renderRow


rowDrag?

optional rowDrag?: RowDragConfig<TRow>

Drag rows to reorder them, and — with a shared group — between two grids. A grip appears at the start of each row on hover.

Reordering the grid's own array only works on an UNSORTED view: with a sort active the sort decides the order and the drop would be invisible. Handle onReorder yourself (updating an order field, or the server) to support a sorted grid.

Inherited from

DataGridProps.rowDrag


rowHeight?

optional rowHeight?: number

The STANDARD row height in px. Default 28.

Inherited from

DataGridProps.rowHeight


rowKey

rowKey: RowKeyResolver<TRow>

REQUIRED: stable row identity — selection, editing and live updates hang off it.

Inherited from

DataGridProps.rowKey


rowMenu?

optional rowMenu?: GridMenuItem<RowMenuContext<TRow>>[] | ((context) => GridMenuItem<RowMenuContext<TRow>>[])

Right-click (and Shift+F10 / ContextMenu key) menu for data rows. A function receives the row that was clicked, so the items can depend on it. Returning an empty list suppresses the menu for that row.

Inherited from

DataGridProps.rowMenu


rowNumbers?

optional rowNumbers?: boolean

A leading column numbering the rows (gap analysis P3.5). Default false.

The number is the row's position in WHAT IS SHOWN — it renumbers after a sort or a filter rather than carrying a record's identity around. A stable per-record number is a column of your data; this is a reading aid, the one users mean when they say "the third row".

With pagination on it continues across pages: page 2 of 50 starts at 51, because a second page starting at 1 again says nothing about position. Group headers and detail panels get an empty cell — a number on a group header would claim it is a record.

Inherited from

DataGridProps.rowNumbers


scrolling?

optional scrolling?: ScrollingConfig

Virtual (default) or infinite scrolling.

Inherited from

DataGridProps.scrolling


selection?

optional selection?: SelectionConfig

Inherited from

DataGridProps.selection


showRowCount?

optional showRowCount?: boolean

Deprecated

Retired 2026-08-15 and now a no-op; the prop is kept so existing call sites do not break, and will be dropped in a later major.

It rendered a strip under the grid whose only remaining content was the row count. That strip once carried the per-column totals too, but punch item #18 moved those into the column-aligned footer ROW, where each number sits under the column it belongs to — leaving a whole bar to say one number. With the Enterprise status bar switched on, that number was then printed twice, one line above itself.

Where the count lives now: the status bar (statusBar, Enterprise — it reports total, filtered and selected), or the pager, which shows the total whenever pagination is on.

Inherited from

DataGridProps.showRowCount


optional sideBar?: boolean | SideBarOptions

Docked side bar on the grid's right edge (P1.3). true offers both tool panels (Columns, Filters) as a closed tab strip; the object form picks panels and can open one on mount. Everything the panels do goes through the controller, so changes made here and from the header menu, filter row or builder stay in one state.


sortable?

optional sortable?: boolean

Header click sorting (multi-sort follows sorting.multi + Shift).

Inherited from

DataGridProps.sortable


sorting?

optional sorting?: SortingConfig

Inherited from

DataGridProps.sorting


stateStoring?

optional stateStoring?: StateStoringConfig

Remember the user's columns, sort, filters and grouping between visits. Off by default: persisting a layout the app never asked to persist is a surprise, and the storage key is shared ground the app may own.

Inherited from

DataGridProps.stateStoring


statusBar?

optional statusBar?: boolean | StatusBarOptions

Docked status bar under the grid (P1.2). true shows all built-ins: total rows, filtered rows (only while a filter narrows), selected rows (only while any), and the range statistics. The object form picks which, and itemsAfter appends the app's own indicators.

When enabled it HOSTS the range-statistics strip — the standalone strip is not rendered as well, so the numbers appear exactly once.


striped?

optional striped?: boolean

Alternating row background.

Inherited from

DataGridProps.striped


style?

optional style?: CSSProperties

Inherited from

DataGridProps.style


styledExport?

optional styledExport?: boolean

Excel exports carry the grid's presentation (alignment, number formats, banded rows, Excel outline levels for groups, totals row). Default true — this is the "styled export AUTOMATIC" the Enterprise edition promises; set false to fall back to the Community sheet.


summaries?

optional summaries?: SummaryDef<TRow>[]

Footer totals over the filtered rows.

Inherited from

DataGridProps.summaries


theme?

optional theme?: GridTheme

A packaged look — 'quartz', 'balham', 'material', 'alpine', 'kanuni' or 'kanuni-midnight'. Omit for the default palette, which is unchanged and always will be.

Switchable at runtime: it resolves to one class on the grid root, so changing it repaints without rebuilding anything. Combines with dark (each theme ships both palettes) and with density. 'kanuni-midnight' is already dark and ignores the flag.

Every colour, metric and border the stylesheet draws with is a --dg-* custom property, so a theme is a token override and nothing more — override the same properties yourself under your own class to go further.

Inherited from

DataGridProps.theme


toolbar?

optional toolbar?: boolean

Toolbar with search, column chooser and export.

Inherited from

DataGridProps.toolbar


toolbarColumnChooser?

optional toolbarColumnChooser?: boolean

The toolbar's Columns button — the popup listing HIDDEN columns. Default true. The Enterprise wrapper turns it off when the side bar's Columns panel is showing: two surfaces answering "where did my column go" is one more than anyone needs, and the panel is the fuller of the two.

Inherited from

DataGridProps.toolbarColumnChooser


toolbarExcel?

optional toolbarExcel?: boolean

Add an Excel entry to the toolbar's export menu (needs the optional exceljs peer).

Inherited from

DataGridProps.toolbarExcel


toolbarItemsAfter?

optional toolbarItemsAfter?: ReactNode

Inherited from

DataGridProps.toolbarItemsAfter


toolbarItemsBefore?

optional toolbarItemsBefore?: ReactNode

Extra toolbar controls, before / after the built-in ones.

Inherited from

DataGridProps.toolbarItemsBefore


toolbarPdf?

optional toolbarPdf?: boolean

Add a PDF entry to the toolbar's export menu (needs the optional jspdf and jspdf-autotable peers).

Off by default for the same reason as Excel: an entry that is always there would fail on a grid that never installed the libraries, and a menu item that throws is worse than one that is absent.

Inherited from

DataGridProps.toolbarPdf


tooltip?

optional tooltip?: GridTooltipConfig

Cell and header tooltips (P2.1). On by default — with no configuration at all, a cell whose text is clipped shows it in full on hover, which is the complaint this exists to answer. Pass { enabled: false } to opt out, or see a column's tooltip / tooltipField to say something else.

Inherited from

DataGridProps.tooltip


tree?

optional tree?: TreeDataConfig<TRow>

Hierarchical rows (Enterprise, P1.4): each row points at its parent, the grid renders the tree. Mutually exclusive with grouping — tree wins and grouping is ignored (reported under debugMode). Client row model only.

Inherited from

DataGridProps.tree


virtualization?

optional virtualization?: VirtualizationConfig

Inherited from

DataGridProps.virtualization


worker?

optional worker?: WorkerConfig

Inherited from

DataGridProps.worker