Current limitations
The current feature surface is broad, but the following constraints should be evaluated before adoption.
Not currently implemented
- Variable or automatic row heights and cell text wrapping (header labels can
wrap and grow the header:
wrapHeaderText/autoHeaderHeight) - Sticky column-group labels: a wide group's label scrolls out of view with the group's left edge rather than staying visible while the group is on screen
- Master/detail row panels
- Pivoting on the server-side row model (client-side pivot is supported)
- Within pivot mode: filters on the generated columns (filters run pre-pivot on source rows), in-table row/column grand totals (the footer aggregate row shows per-column grand totals), and drag-and-drop between the column panel's field wells (an entry drags to reorder within its own well; moving between roles is the + and × buttons)
- ARIA exposure of the column-group header hierarchy (parent header cells are
presentational; leaf headers are full
columnheaders) - An in-grid contextual keyboard-shortcut reference
The grid's assistive-technology support — the ARIA grid model, focus and announcement behavior, and its current boundaries — is described on the dedicated accessibility page.
Client-side-only behavior
Quick filter, full-width rows, custom filter matchers, and row transactions
require the client-side model. Server-side grouping, server-side tree
data, and sticky ancestors are
supported, but server-side group sorting is local to each listing. Tree data's
path, parent, and children relationship modes are client-side; the
server-side model uses mode: "server", where the data source answers one
parent's children at a time.
The quick filter's find behavior
additionally needs data-row cells to highlight, so it is unavailable while the
pivot layout is displayed (every displayed row there is a group row). In both
cases getFindState().available is false and the search filters instead.
Finding in a very narrow grid keeps one rough edge. A match the grid cannot scroll clear of the floating search box is normally uncovered by moving the box to the opposite edge (Keeping matches visible), but that only helps where the grid can hold the box clear of where it already stands — under roughly twice its width, both edges cover the same cells, so the box stays put and the match stays behind it. Host the widget in the toolbar at those widths, where it sits outside the data region altogether.
Server-side differences
The server is responsible for filtering and sorting complete data. As a result, iteration cannot expose a separate pre-filter/pre-sort universe. Open-ended listings have provisional row/page counts until a short block establishes the end. Under server-side tree data, filtering — ancestor preservation included — is likewise the server's. Export writes the rows the client holds, in the shape on screen: an expanded parent with the children the grid has fetched, a collapsed one alone, and nothing from blocks never requested. The aggregate cells of a server-side export — group subtotals and the footer — are the numbers the grid displays, written as values rather than formulas, since a formula over the exported rows could not reproduce them.
Layout
All rows currently have one fixed height. Cell spans stop at pinned-section boundaries.
Column virtualization covers
the body's centre section only. The header renders a cell for every column (its
cost is columns × header levels, and autoHeaderHeight measures every header
cell), as do the pinned sections, the aggregate row and the pinned and sticky
rows. While any centre column defines colSpan, the centre renders every column. A span that exists only on some rows can produce a visually
non-rectangular selected region even though the selection model remains a
rectangle.
Right-to-left
Right-to-left layout is supported, with these exceptions:
- Sparklines and charts render left-to-right in a right-to-left grid.
- Exported files (CSV and Excel) are not mirrored: columns keep the grid's column order.
- The direction is fixed when the grid is created. Changing
diron the page (or an ancestor) later does not flip a live grid, andenableRtlcannot be updated at runtime; destroy the grid and create it again.