DataGrid
BitDataGrid is a robust way to display an information-rich collection of items, and allow people to sort and filter the content. Use a data-grid when information density is critical.
Notes
To use this component, you need to install the
Bit.BlazorUI.Extras
NuGet package, as described in the Optional steps of the
Getting started page.
Usage
Basic & sorting
The item type flows from the grid to its columns automatically (no per-column TItem needed), a column binds to its property with the strongly typed Property selector (the string-based Field parameter also remains available), and columns can be wrapped in an optional
Filtering & paging
This example binds columns with the string-based
Selection
0 selected
Inline editing
EditTemplate on a column to supply your own editor.
Grouping & aggregates
Aggregate types, AggregateBy computes a custom
aggregate - here the Supplier column counts distinct suppliers per group and overall.
Templates & detail rows
Field) is not sortable by default - give it a
SortBy key selector to sort it, like the computed Value column here.
Resize, reorder & freeze columns
Column header groups
Group on consecutive columns to render them under a single spanning header cell.
Column spanning
ColSpan function on a column to let a single cell span several columns based on its row.
Discontinued rows span the Name cell over Category; premium rows span Price over Stock.
Virtualization
Height and RowHeight.
10,000 rows
Server-side data
OnRead callback to take over sorting/filtering/paging (e.g. against a database).
This example simulates a backend with a small delay.
Last request → skip 0, take 10, sorts: 0, filters: 0, total: 523
Infinite scrolling
OnLoadMore instead of binding Items. The grid appends the next batch
automatically as the user scrolls toward the end - with no total count or paging UI. A fixed
Height is required. CSV/Excel exports issue a single request with
Take = null ("all rows"), so the handler should honor a null Take.
Batch #1 → loaded rows 1–40 (40 rows)
Tree view (hierarchical rows)
ChildrenSelector parameter to a function that returns each item's direct children.
The grid then treats Items as the root nodes and renders expand/collapse toggles with indentation.
Master detail
DetailTemplate can render anything - including another BitDataGrid.
Each supplier expands to show a nested, sortable grid of the products it provides.
Row reordering
RowReorderable="true" to show a drag handle on each row. Grab the ⠿ handle and drop it
onto another row. The grid reorders the bound list in place and raises OnRowReorder.
Cell events & context menu
OnCellClick, OnCellDoubleClick and OnCellContextMenu
with the row, column and the underlying mouse event. Here OnCellContextMenu opens a custom
context menu at the pointer position (right-click any cell).
Click, double-click or right-click any cell.
Keyboard cell navigation
CellNavigation="true" to enable a roving tab stop. Use arrow keys, Home/End,
Ctrl+Home/End, PageUp/PageDown to move, Enter/F2 to edit (Esc to cancel), and Delete to
delete the focused row (requires Editable).
Variable row height
RowHeightSelector a function that returns the desired height (in pixels) for a given row.
Here premium products (price over $500) get a taller row.
Empty state
EmptyTemplate to customize the placeholder shown when there is no data,
or rely on the built-in "No records to display" message.
Borders & Striping
Bordered and Striped parameters.
RTL
Direction parameter to BitDir.Rtl.
Filter operators
FilterOperators to let users pick the comparison for each filter instead of the fixed
default: text columns offer contains / doesn't contain / starts with / ends with / = / ≠,
while number and date columns offer = ≠ > ≥ < ≤. Changing the operator re-applies the current filter text.
Individual columns can override the grid-level setting - the Supplier column opts out here,
keeping its fixed default filter.
Edit validation
Validate function to check proposed edits. While any editor holds an
invalid value, the message renders under it and Save is blocked. Edits are buffered - the underlying
object is only modified when Save is clicked, so Cancel always leaves the row untouched.
Try clearing the Name, or entering a negative Price or Stock.
State persistence
GetState() captures the user-adjustable state (page, page size, sorts, filters, groups and
column layout) as a serializable snapshot; ApplyStateAsync() restores it. Adjust the grid
(sort, filter, resize, hide columns, change page), save the state, shuffle things around, then restore.
Adjust the grid, then save its state.
Server-side virtualization
Virtualize with OnRead (and no paging) to browse an arbitrarily large
remote dataset: row windows are fetched on demand as you scroll - this example simulates 100,000 rows.
The footer shows server-provided aggregates (via BitDataGridReadResult.Aggregates)
computed over the whole filtered dataset, and the Rating column is pinned to the end edge
with FrozenEnd.
Localization
Strings parameter
(a BitDataGridStrings). Assign a customized instance to localize the grid; this
example renders a Persian (RTL) grid.
IQueryable data source
IQueryable<T> to Items and the grid translates filtering,
sorting and paging into expression trees composed onto the queryable - so a remote LINQ
provider such as EF Core executes them at the source (SQL WHERE/ORDER BY/OFFSET)
and only the current page is ever materialized. This example uses an in-memory queryable;
bind dbContext.Products the same way.
Excel export
ShowExcelExport adds a toolbar button that downloads the full (filtered/sorted)
data as a real .xlsx workbook - generated in-process with no external library.
Numbers and booleans are written as native cell types so spreadsheet formulas work on them,
and the workbook mirrors the grid's layout: a bold, frozen header row, the grid's column
widths, frozen columns as Excel freeze panes and ColSpan cells as merged cells.
With ExcelExportStyled the workbook also carries the grid's current visual
theme - the rendered header/row colors, the striped alternating background, the border
color and bold/italic fonts are sampled from the live DOM at export time, so whatever theme
is active (light, dark, custom) is what lands in the file.
Exports always cover all matching rows, not just the rendered ones: server and
infinite-scrolling modes fetch the full set through OnRead/OnLoadMore,
and tree mode includes collapsed branches.
Export with complex layouts
DetailTemplate, frozen ID/Name columns and
ColSpan spanning (discontinued rows span Name over Category) - try scrolling,
expanding details and filtering, then export. The Excel file mirrors the layout:
the frozen ID/Name columns (plus the header row) become a freeze pane and each spanning
cell becomes a merged cell. The data stays faithful in both formats: frozen columns keep
their declared order, a templated field column (Name) exports the raw field value rather
than its markup, detail content is not exported (master rows only), and the template-only
Value column (no Field) is skipped. CSV has no layout concepts, so it
stays flat - there every column exports its own value, including the Category a span covers.
Lazy tree loading
ChildrenProvider (instead of ChildrenSelector) to fetch a node's
children asynchronously on first expand - e.g. from a backend - with the results cached for
later toggles. Pair it with HasChildrenSelector so unloaded nodes know whether to
render an expand toggle. Expanding a folder below simulates a 600 ms backend call.
Touch drag & drop
Column virtualization
VirtualizeColumns renders only the columns in (and near) the horizontal viewport,
replacing scrolled-out runs with spacer cells - for grids with very many columns. This example
declares 40 measurement columns (plus a frozen ID column) but only the visible window exists in
the DOM while you scroll horizontally. Combine it with row Virtualize for large
datasets in both dimensions. Columns need explicit pixel widths.
Programmatic control
SortByAsync /
ClearSortsAsync, ApplyFilterAsync / ClearFiltersAsync,
GroupByAsync / UngroupAsync, GoToPageAsync,
SetPageSizeAsync and RefreshAsync.
API
BitDataGrid parameters
| Name | Type | Default value | Description |
|---|---|---|---|
| Items | IEnumerable<TItem>? | null | The data source bound to the grid for client-side processing. An IQueryable<T> (e.g. an EF Core DbSet) gets filtering/sorting/paging translated into expression trees the provider executes at the source, materializing only the current page. |
| OnRead | Func<BitDataGridReadRequest, Task<BitDataGridReadResult<TItem>>>? | null | Server-side data callback. When set, the grid delegates sort/filter/page/group to the caller. |
| OnLoadMore | Func<BitDataGridReadRequest, Task<BitDataGridReadResult<TItem>>>? | null | Infinite-scrolling data callback. Loads rows in batches and appends the next batch as the user scrolls toward the end. CSV/Excel exports issue a single request with Take = null ("all rows"), so the handler should honor a null Take. |
| LoadMoreBatchSize | int | 50 | Number of rows fetched per batch in infinite-scrolling mode. |
| ChildContent | RenderFragment? | null | Column definitions and other declarative children. |
| Columns | RenderFragment? | null | Alias of ChildContent, letting column definitions read declaratively as <Columns>...</Columns>. Both fragments are rendered when both are set. |
| Loading | bool | false | Shows a loading overlay while data is being fetched. |
| KeyField | Func<TItem, object>? | null | Optional key selector used for selection/edit identity. Defaults to reference equality. |
| ChildrenSelector | Func<TItem, IEnumerable<TItem>?>? | null | Child selector that turns the grid into a hierarchical tree grid. |
| ChildrenProvider | Func<TItem, Task<IEnumerable<TItem>?>>? | null | Async children provider for a lazily-loaded tree grid: children are fetched on a node's first expand (e.g. from a backend) and cached. Mutually exclusive with ChildrenSelector; pair with HasChildrenSelector. |
| HasChildrenSelector | Func<TItem, bool>? | null | Tells whether a node can have children before they are loaded, so unloaded lazy nodes render an expand toggle. Only used with ChildrenProvider. |
| TreeInitiallyExpanded | bool | false | When tree mode is active, controls whether nodes start expanded. Ignored in lazy mode (ChildrenProvider). |
| Class | string? | null | Custom CSS class for the root element. |
| Style | string? | null | Custom inline style for the root element. |
| Height | string? | null | Height of the scroll viewport, e.g. "480px". Required for virtualization and infinite scrolling. |
| Striped | bool | true | Renders alternate-row striping. |
| Hoverable | bool | true | Highlights the row under the pointer. |
| Bordered | bool | true | Renders cell borders. |
| ShowHeader | bool | true | Renders the header row. |
| ShowFooter | bool | false | Renders the footer/aggregate row. |
| Direction | BitDir | BitDir.Ltr | Text direction (LTR/RTL). |
| Sortable | bool | true | Enables column sorting by clicking headers. |
| MultiSort | bool | true | Enables multi-column sorting via Ctrl/⌘+click with priority badges. |
| Filterable | bool | false | Renders a per-column quick-filter row. |
| FilterOperators | bool | false | Shows an operator dropdown next to text/number/date filter editors so users pick the comparison (contains/starts with/=/≠/>/≥/</≤) instead of the fixed default. |
| Strings | BitDataGridStrings | new() | All user-visible strings rendered by the grid; assign a customized instance to localize the UI. |
| Resizable | bool | false | Enables column resizing by dragging header edges. |
| Reorderable | bool | false | Enables column reordering via drag-and-drop (mouse via native HTML5 DnD, touch/pen via a pointer-event fallback). |
| Groupable | bool | false | Enables grouping via a header button on groupable columns. |
| ShowToolbar | bool | false | Renders the toolbar area. |
| ShowColumnChooser | bool | false | Renders a column show/hide chooser in the toolbar. |
| ShowCsvExport | bool | false | Renders a CSV export button. The export covers all matching rows in every data mode, not just the rendered ones. |
| ShowExcelExport | bool | false | Renders an Excel (.xlsx) export button. The workbook is generated in-process with no external dependency, covers all matching rows in every data mode, and mirrors the grid's layout: bold frozen header row, column widths, leading frozen columns as a freeze pane and ColSpan cells as merged cells. |
| ExcelExportStyled | bool | false | When true, Excel exports also carry the grid's current visual theme: the rendered header/row colors, striped alternating rows, border color and bold/italic fonts are sampled from the live DOM at export time (so the active theme - including dark mode - lands in the workbook). Falls back to the plain bold-header styling when JS is unavailable (prerendering). |
| CellNavigation | bool | false | Enables keyboard cell navigation with a roving tabindex (arrows/Home/End/PageUp/PageDown to move, Enter/F2 to edit, Delete to delete the focused row when Editable). |
| RowReorderable | bool | false | Enables drag-and-drop row reordering (mouse, touch and pen; plus keyboard via the drag handle's arrow keys). |
| OnRowReorder | EventCallback<BitDataGridRowReorderEventArgs<TItem>> | Raised when a row is dropped onto another row during reordering. | |
| SelectionMode | BitDataGridSelectionMode | BitDataGridSelectionMode.None | How rows can be selected (None/Single/Multiple). |
| SelectedItems | IReadOnlyList<TItem>? | null | The selected items (supports two-way binding). |
| SelectedItemsChanged | EventCallback<IReadOnlyList<TItem>> | Raised when the selection changes. | |
| OnRowClick | EventCallback<TItem> | Raised when a row is clicked. | |
| OnCellClick | EventCallback<BitDataGridCellEventArgs<TItem>> | Raised when a data cell is clicked. | |
| OnCellDoubleClick | EventCallback<BitDataGridCellEventArgs<TItem>> | Raised when a data cell is double-clicked. | |
| OnCellContextMenu | EventCallback<BitDataGridCellEventArgs<TItem>> | Raised when a data cell is right-clicked. | |
| IsRowSelectionDisabled | Func<TItem, bool>? | null | Predicate returning true when a given row may not be selected. |
| Pageable | bool | false | Enables paging with a pager UI. |
| PageSize | int | 20 | The number of rows per page. |
| PageSizeOptions | int[] | { 10, 20, 50, 100 } | The page-size options offered in the pager dropdown. |
| PagerPosition | BitDataGridPagerPosition | BitDataGridPagerPosition.Bottom | Where the pager renders relative to the grid. |
| Virtualize | bool | false | Renders only the visible rows for large datasets. Requires a fixed Height and RowHeight. In server mode (OnRead) with paging off, row windows are fetched on demand as the user scrolls; with OnLoadMore, the accumulated batches are virtualized so the DOM stays bounded. |
| RowHeight | float | 36 | Uniform row height in pixels (required when virtualizing). |
| RowHeightSelector | Func<TItem, float>? | null | Optional per-row height selector (ignored while virtualizing). |
| VirtualizeColumns | bool | false | Renders only the columns in (and near) the horizontal viewport, replacing scrolled-out runs with spacers - for grids with very many columns. Requires explicit px column widths; not applied with column header groups or ColSpans. |
| Editable | bool | false | Enables inline editing with a command column. |
| NewItemFactory | Func<TItem>? | null | Factory used by the toolbar Add button to create a new row. |
| OnRowSave | EventCallback<TItem> | Raised when an edited row is saved. | |
| OnRowCancel | EventCallback<TItem> | Raised when an edit is cancelled. | |
| OnRowDelete | EventCallback<TItem> | Raised when a row is deleted (via the command column's Delete button or the Delete key in cell navigation). | |
| OnRowCreate | EventCallback<TItem> | Raised when a new row is created. | |
| EmptyTemplate | RenderFragment? | null | Custom content rendered when there is no data. |
| ToolbarTemplate | RenderFragment? | null | Custom content rendered in the toolbar's start area. |
| DetailTemplate | RenderFragment<TItem>? | null | Expandable master-detail content rendered under a row. |
BitDataGrid public members
| Name | Type | Default value | Description |
|---|---|---|---|
| RefreshAsync | Task | Recomputes the data view (filter → sort → group → page) and re-renders the grid. | |
| SortByAsync | Task | SortByAsync(columnId, direction, additive) - programmatically sorts by a column; BitDataGridSortDirection.None removes the sort. | |
| ClearSortsAsync | Task | Removes all active sorts and refreshes. | |
| ApplyFilterAsync | Task | ApplyFilterAsync(columnId, operator, value) - programmatically applies a filter, replacing any existing one on the column. | |
| ClearFilterAsync | Task | ClearFilterAsync(columnId) - removes the filter(s) applied to a column. | |
| ClearFiltersAsync | Task | Clears all active column filters and refreshes. | |
| GroupByAsync | Task | GroupByAsync(columnId) - adds the column as the next (nested) grouping level. | |
| UngroupAsync | Task | UngroupAsync(columnId) - removes the column's grouping level. | |
| ClearGroupsAsync | Task | Removes all active groupings and refreshes. | |
| GoToPageAsync | Task | GoToPageAsync(page) - navigates to the given 1-based page (clamped to the valid range). | |
| SetPageSizeAsync | Task | SetPageSizeAsync(size) - changes the page size and resets to the first page (without mutating the PageSize parameter). | |
| GetState | BitDataGridState | Captures the user-adjustable state (page, page size, sorts, filters, groups, column layout) as a serializable snapshot. | |
| ApplyStateAsync | Task | ApplyStateAsync(state) - restores a state snapshot captured by GetState. | |
| ExportCsvAsync | Task | Generates the full (filtered/sorted) data as CSV and triggers a client-side download. Covers all matching rows in every data mode - server/infinite modes fetch them through OnRead/OnLoadMore, tree mode includes collapsed branches. | |
| ToCsv | string | Builds a CSV string of the full dataset synchronously - tree mode includes collapsed branches, queryable mode covers all pages. Only server/infinite modes are limited to the loaded rows (their providers are async); use ToCsvAsync there. | |
| ToCsvAsync | Task<string> | Builds a CSV string of the full dataset - server/infinite modes issue an OnRead/OnLoadMore request with no paging (Take = null), tree mode includes collapsed branches. | |
| ToExcelAsync | Task<byte[]> | Generates the full (filtered/sorted) dataset as an Excel workbook (.xlsx), covering all matching rows in every data mode (like ToCsvAsync). The workbook mirrors the grid's layout: bold frozen header row, column widths, leading frozen columns as a freeze pane and ColSpan cells as merged cells; with ExcelExportStyled it also carries the grid's rendered theme (colors, striping, borders, fonts). | |
| ExportExcelAsync | Task | Generates the .xlsx workbook and triggers a client-side download. | |
| ActiveSorts | IReadOnlyList<BitDataGridSortDescriptor> | [] | The active sort descriptors, in priority order. |
| ActiveFilters | IReadOnlyList<BitDataGridFilterDescriptor> | [] | The active filter descriptors. |
| ActiveGroups | IReadOnlyList<BitDataGridGroupDescriptor> | [] | The active group descriptors, in nesting order. |
| TotalCount | int | 0 | Total number of rows in the current (filtered) view; the server-reported total in server mode. |
| TotalPages | int | 1 | Total number of pages while paging is active. |
| CurrentPage | int | 1 | The 1-based current page. |
| ExpandAllAsync | Task | Expands every node in the tree. No-op outside tree mode. | |
| CollapseAllAsync | Task | Collapses every node in the tree. No-op outside tree mode. |
BitDataGridColumn properties
Defines a column inside a BitDataGrid. Place these as child content of the grid.
| Name | Type | Default value | Description |
|---|---|---|---|
| Field | string? | null | Name of the property this column is bound to. Supports nested paths ("Address.City"). Prefer Property for a strongly typed, refactor-safe alternative. |
| Property | Expression<Func<TItem, object?>>? | null | Typed selector of the property this column is bound to, e.g. Property="p => p.Name". A strongly typed, refactor-safe alternative to Field that supports nested member chains (p => p.Address.City). Takes precedence over Field when both are set. |
| ColumnId | string? | null | Stable identifier for the column. Defaults to the resolved Property/Field path. |
| Title | string? | null | Header text. Defaults to a humanized Property/Field name. |
| Width | string? | null | CSS width, e.g. "120px" or "20%". When null the column shares remaining space. |
| MinWidth | int | 60 | Minimum width in pixels the column can be resized to. |
| MaxWidth | int? | null | Maximum width in pixels the column can be resized to. |
| Sortable | bool? | null | Overrides the grid-level Sortable for this column. |
| SortBy | Func<TItem, object?>? | null | Custom sort key selector. Enables sorting for template-only columns and overrides the field value as the sort key (client mode). |
| SortDescendingFirst | bool | false | When true, the first click on the header sorts descending instead of ascending. |
| Validate | Func<TItem, object?, string?>? | null | Validator for inline edits: receives the row and the proposed value, returns an error message to reject it (blocking Save) or null to accept. |
| Filterable | bool? | null | Overrides the grid-level Filterable for this column. |
| FilterOperators | bool? | null | Overrides the grid-level FilterOperators (the operator dropdown next to this column's filter editor). |
| Resizable | bool? | null | Overrides the grid-level Resizable for this column. |
| Reorderable | bool? | null | Overrides the grid-level Reorderable for this column. |
| Editable | bool? | null | Overrides the grid-level Editable for this column. |
| Groupable | bool? | null | Overrides the grid-level Groupable for this column. |
| Frozen | bool | false | Pins the column to the start edge so it stays visible while scrolling horizontally. |
| FrozenEnd | bool | false | Pins the column to the end edge (right in LTR, left in RTL). Typical for action/status columns. |
| Group | string? | null | Optional header group name. Consecutive columns sharing the same value render under a single spanning header cell. |
| ColSpan | Func<TItem, int?>? | null | Optional per-row column span. |
| Visible | bool | true | Whether the column is visible. |
| Align | BitDataGridColumnAlign | BitDataGridColumnAlign.Left | Horizontal alignment of cell content. |
| Format | string? | null | A .NET format string applied to the value (e.g. "C2", "yyyy-MM-dd"). |
| DataType | BitDataGridColumnDataType | BitDataGridColumnDataType.Auto | The data type used to pick the editor/filter. |
| Aggregate | BitDataGridAggregateType | BitDataGridAggregateType.None | The footer/group aggregate function. |
| AggregateBy | Func<IReadOnlyList<TItem>, object?>? | null | Custom aggregate function for computations beyond the built-ins (e.g. distinct count). Takes precedence over Aggregate. |
| AggregateFormat | string? | null | Format string for the aggregate value. Falls back to Format. |
| HeaderClass | string? | null | Custom CSS class applied to the header cell. |
| CellClass | string? | null | Custom CSS class applied to each data cell. |
| Template | RenderFragment<TItem>? | null | Custom rendering for a data cell. |
| HeaderTemplate | RenderFragment? | null | Custom rendering for the header cell content. |
| EditTemplate | RenderFragment<TItem>? | null | Custom editor rendered when the row/cell is in edit mode. |
| FooterTemplate | RenderFragment<BitDataGridAggregateResult>? | null | Custom rendering for the footer/aggregate cell. |
BitDataGridReadRequest properties
Describes the data the grid needs from a server-side/infinite source (passed to OnRead/OnLoadMore).
| Name | Type | Default value | Description |
|---|---|---|---|
| Skip | int | 0 | Zero-based number of items to skip. |
| Take | int? | null | Maximum number of items to return (null means all). |
| Sorts | IReadOnlyList<BitDataGridSortDescriptor> | [] | The active sort descriptors ordered by priority. |
| Filters | IReadOnlyList<BitDataGridFilterDescriptor> | [] | The active filter descriptors. |
| Groups | IReadOnlyList<BitDataGridGroupDescriptor> | [] | The active group descriptors in nesting order, letting a server-side handler reconstruct the grouping. Empty when no grouping is active. |
| CancellationToken | CancellationToken | A token that is cancelled when the request is superseded by a newer one. |
BitDataGridReadResult<TItem> properties
Result returned from a grid's OnRead/OnLoadMore callback.
| Name | Type | Default value | Description |
|---|---|---|---|
| Items | IReadOnlyList<TItem> | The items for the current page/window. | |
| TotalCount | int | The total number of items matching the current filters (ignored in infinite mode). | |
| Aggregates | IReadOnlyList<BitDataGridAggregateResult>? | null | Optional aggregates computed by the data source over the whole filtered dataset; when provided, the footer shows these instead of aggregating the current page locally. |
BitDataGridCellEventArgs<TItem> properties
Arguments passed to cell-level event callbacks.
| Name | Type | Default value | Description |
|---|---|---|---|
| Item | TItem | The row item. | |
| Column | BitDataGridColumn<TItem> | The column the cell belongs to. | |
| ColumnId | string | The column field/identifier. | |
| ColumnTitle | string | The column's display title. | |
| Value | object? | null | The raw value of the cell. |
| Mouse | MouseEventArgs | The underlying browser mouse event. |
BitDataGridRowReorderEventArgs<TItem> properties
Arguments raised when a row is reordered via drag-and-drop.
| Name | Type | Default value | Description |
|---|---|---|---|
| DraggedItem | TItem | The dragged row item. | |
| TargetItem | TItem | The drop-target row item. | |
| FromIndex | int? | The original index of the dragged item, or null when the bound Items is not an indexable list. | |
| ToIndex | int? | The destination index, or null when the bound Items is not an indexable list. |
BitDataGridSortDescriptor properties
Describes the sort state applied to a single column (found on BitDataGridReadRequest.Sorts).
| Name | Type | Default value | Description |
|---|---|---|---|
| ColumnId | string | The identifier of the column being sorted. | |
| Direction | BitDataGridSortDirection | BitDataGridSortDirection.Ascending | The sort direction. |
| Priority | int | int.MaxValue | Priority for multi-column sorting (1 = primary). |
BitDataGridFilterDescriptor properties
Describes a filter applied to a single column (found on BitDataGridReadRequest.Filters).
| Name | Type | Default value | Description |
|---|---|---|---|
| ColumnId | string | The identifier of the column being filtered. | |
| Operator | BitDataGridFilterOperator | BitDataGridFilterOperator.Contains | The comparison operator applied to the value. |
| Value | object? | null | The value compared against the column's cell value. |
BitDataGridGroupDescriptor properties
Describes a grouping applied to a column.
| Name | Type | Default value | Description |
|---|---|---|---|
| ColumnId | string | The identifier of the column being grouped. | |
| Direction | BitDataGridSortDirection | BitDataGridSortDirection.Ascending | The sort direction applied to the group keys. |
BitDataGridAggregateResult properties
Holds the computed aggregate value for a column footer or group (passed to a column's FooterTemplate).
| Name | Type | Default value | Description |
|---|---|---|---|
| ColumnId | string | The identifier of the aggregated column. | |
| Type | BitDataGridAggregateType | The aggregate function that produced the value. | |
| Value | object? | null | The raw aggregate value. |
| FormattedValue | string | string.Empty | The aggregate value formatted using the column's AggregateFormat/Format. |
BitDataGridState properties
A serializable snapshot of the grid's user-adjustable state, captured with GetState() and restored with ApplyStateAsync(). Enables persisting grid state across sessions.
| Name | Type | Default value | Description |
|---|---|---|---|
| CurrentPage | int | 1 | The 1-based current page. |
| PageSize | int? | null | The user-selected page size, or null when the grid's PageSize parameter applies. |
| Sorts | List<BitDataGridSortDescriptor> | [] | The active sort descriptors. |
| Filters | List<BitDataGridFilterDescriptor> | [] | The active filter descriptors. |
| Groups | List<BitDataGridGroupDescriptor> | [] | The active group descriptors. |
| Columns | List<BitDataGridColumnState> | [] | Per-column layout state. |
BitDataGridColumnState properties
A per-column layout entry inside BitDataGridState.Columns.
| Name | Type | Default value | Description |
|---|---|---|---|
| ColumnId | string | string.Empty | The column's stable identifier (ColumnId or Field). |
| Visible | bool | true | Whether the column is shown (column-chooser state). |
| Width | double? | null | The resized width in pixels, or null when the column was never resized. |
| Order | int | 0 | The display position among all columns. |
BitDataGridStrings properties
All user-visible (and screen-reader) strings rendered by the grid, defaulting to English. Assign a customized instance to the Strings parameter to localize - including empty/loading texts, pager texts, filter placeholders and operators, edit buttons, aggregate labels, aria-labels and live-region announcements.
| Name | Type | Default value | Description |
|---|---|---|---|
| EmptyText | string | "No records to display." | Shown when the grid has no rows to display. |
| LoadingText | string | "Loading…" | Shown while Loading is true. |
| PagerRangeFormat | string | "{0}–{1} of {2}" | Pager range summary format. |
| PagerPageFormat | string | "Page {0} of {1}" | Pager page summary format. |
| InvalidValueError | string | "Invalid value for {0}." | Error shown when an edited value can't be converted to the column's type. |
| … | string | Plus ~40 more: toolbar/edit button texts, filter placeholder and operator labels, boolean/enum option texts, group/detail/tree/reorder aria-labels, aggregate label formats and aria-live announcements. |
BitDataGridColumnAlign enum
| Name | Value | Description |
|---|---|---|
| Left | 0 | |
| Center | 1 | |
| Right | 2 |
BitDataGridSortDirection enum
| Name | Value | Description |
|---|---|---|
| None | 0 | |
| Ascending | 1 | |
| Descending | 2 |
BitDataGridSelectionMode enum
| Name | Value | Description |
|---|---|---|
| None | 0 | |
| Single | 1 | |
| Multiple | 2 |
BitDataGridAggregateType enum
| Name | Value | Description |
|---|---|---|
| None | 0 | |
| Sum | 1 | |
| Average | 2 | |
| Count | 3 | |
| Min | 4 | |
| Max | 5 | |
| Custom | 6 | The value was produced by the column's custom AggregateBy delegate rather than a built-in function. |
BitDataGridPagerPosition enum
| Name | Value | Description |
|---|---|---|
| Bottom | 0 | |
| Top | 1 | |
| TopAndBottom | 2 |
BitDir enum
| Name | Value | Description |
|---|---|---|
| Ltr | 0 | |
| Rtl | 1 | |
| Auto | 2 |
BitDataGridColumnDataType enum
| Name | Value | Description |
|---|---|---|
| Auto | 0 | |
| Text | 1 | |
| Number | 2 | |
| Boolean | 3 | |
| Date | 4 | |
| DateTime | 5 | |
| DateTimeOffset | 6 | |
| Enum | 7 |
BitDataGridFilterOperator enum
| Name | Value | Description |
|---|---|---|
| Unspecified | 0 | |
| Contains | 1 | |
| DoesNotContain | 2 | |
| StartsWith | 3 | |
| EndsWith | 4 | |
| Equals | 5 | |
| NotEquals | 6 | |
| GreaterThan | 7 | |
| GreaterThanOrEqual | 8 | |
| LessThan | 9 | |
| LessThanOrEqual | 10 | |
| IsEmpty | 11 | |
| IsNotEmpty | 12 |
Feedback
You can give us your feedback through our GitHub repo by filing a new Issue or starting a new Discussion.
Or you can review / edit this page on GitHub.
- On this page