Grid Editing

Set AllowEdit="true" on MainGrid / SubGrid and a toggle labelled Editable appears in the gear-menu overflow. Flipping it on switches every declared column whose cell renderer isn't overridden into an inline editor — auto-dispatched from the column's Dataverse metadata — while a GridTemplateColumn's EditChildContent takes over from its read-mode ChildContent. Edits accumulate as pending row changes in the grid's transactional buffer and only land in Dataverse when the user saves.

Live Demo

A MainGrid over the contact table with AllowEdit="true". Click the gear icon on the toolbar overflow and flip Editable on. The Full Name column swaps its initials-avatar read template for a custom single-field editor that splits user input back into firstname + lastname. The bare Email, Phone, Age, and Account columns each light up with the editor matching their metadata type — TextEdit for the strings, NumberEdit for the integer, LookupEdit for the customer reference — without any per-column wiring.

Blazor example
You must be logged in to see the contact records in the grid below.
All Contacts
All Contacts

Page size

102050100
Editable
Full Name
Email
Phone
Age
Account
AM Abagail Miller
AP Abdul Pollich
AP Abel Parisian
AK Abigale Kuvalis
AP Adell Paucek
AR Adella Roob
AW Adolf Weber
AT Adonis Torphy
AG Agustin Goyette
AR Agustin Rau
React example

Enabling Editing

Set AllowEdit="true" on the grid. Editing is opt-in per grid — the toggle only appears when the parameter is set, and the toggle itself is only visible when at least one column is editable. While the toggle is off, the grid behaves as a read-only view; while it's on, cells render their inline editors and unsaved changes are tracked per row.

<MainGrid TableName="contact" AllowEdit="true">
    <GridColumns>
        <GridColumn ColumnName="firstname" />
        <GridColumn ColumnName="lastname" />
        <GridColumn ColumnName="emailaddress1" />
    </GridColumns>
</MainGrid>

Why a toggle?

Inline edit changes the cell rendering for every visible row, which is a different read affordance than a static grid. The toggle lets users opt into the edit affordance when they need it (typing a value, tabbing across cells, etc.) and keep the cleaner read affordance the rest of the time. The grid remembers the toggle state for the session.

Automatic editor dispatch

Bare <GridColumn ColumnName="..." /> declarations with no ChildContent auto-dispatch the right inline editor while the grid is in edit mode. The framework reads the column's metadata and picks the editor subclass:

  • String, Memo, EmailAddress, Phone, UrlTextEdit (with format-appropriate validation).
  • Integer, Decimal, Double, BigIntNumberEdit (locale-aware parsing, min/max from metadata).
  • BooleanBoolEdit (rendered as a switch, centered alignment).
  • PicklistChoiceEdit (option-set-driven dropdown, localized labels).
  • MultiSelectPicklistMultiSelectChoiceEdit.
  • Lookup, Customer, OwnerLookupEdit (typeahead-driven, respects target-table allow lists).
  • DateTime, DateOnlyDateTimeEdit.
  • MoneyMoneyEdit (currency-symbol prefix from transactioncurrencyid).
  • File, ImageFileEdit / ImageEdit (drag-drop upload).

Overriding the default editor

Supply ChildContent on a GridColumn to take over both the read-mode display AND the edit-mode editor for that column. Once ChildContent is set, the framework stops auto-dispatching the metadata-driven editor — render whichever editor you want inside the template and gate its visibility off the grid's Editable flag. Standard editors (TextEdit, NumberEdit, ColumnEdit) dropped into the template auto-wire to dirty-tracking and validation via the cascading row context.

<!-- Custom display cell PLUS custom editor. Once ChildContent is
     supplied, the framework no longer auto-dispatches an inline
     editor for this column, so render one yourself if you want
     the cell editable. The dropped-in editor self-registers for
     dirty-tracking and validation via the cascading row context. -->
<GridColumn ColumnName="emailaddress1">
    <ChildContent>
        @{
            var email = context.PrimaryRecord
                .GetValueOrDefault<StringValue>("emailaddress1")?.Value;
        }
        @if (this.Editable)
        {
            <TextEdit ColumnName="emailaddress1"
                      DisplayLabelWhenAvailable="false"
                      DisplayTooltipWhenAvailable="false" />
        }
        else
        {
            <span>@email</span>
        }
    </ChildContent>
</GridColumn>

Validation

Each row maintains its own EditContextValidator. Standard editors register with it on mount and surface their errors inline (red underline + tooltip on the cell). The grid's save button is disabled while any row has an unresolved validation error. Validation rules come from the column metadata:

  • RequiredLevel — the column is required, and an empty value blocks save.
  • Format on string columns — email, phone, URL formats enforce shape on top of the type.
  • MinValue / MaxValue on numeric columns — out-of-range values are flagged before save.
  • Custom validation — register additional rules per-form via the EditContextValidator API for cross-field invariants (e.g. "contact must have either email or phone").

Validation on custom widgets

Custom inputs rendered inside ChildContent / EditChildContent that don't extend BaseEdit (e.g. a raw FluentTextField or a third-party widget) don't auto-register with the row's validator. If you need them validated, either drop a standard editor instead of the raw widget, or run validation manually inside the widget's ValueChanged callback before calling editCtx.SetValue.

Save & Cancel

Edits accumulate as pending updates on the row — modified cells get a small "dirty" indicator, deleted rows are strikethrough, and pending-create rows show as new. The grid's toolbar surfaces Save and Cancel buttons whenever there are pending changes: Save commits the batch in one transactional pass; Cancel discards the buffer and reverts each row to its server state. Pair with NewRecordGridButton and DeleteRecordGridButton in the Buttons fragment to add row creation and deletion to the same edit transaction.

<MainGrid TableName="contact" AllowEdit="true">
    <GridColumns>
        <GridColumn ColumnName="firstname" />
        <GridColumn ColumnName="lastname" />
        <GridColumn ColumnName="emailaddress1" />
    </GridColumns>
    <Buttons>
        <NewRecordGridButton TForm="NewContactForm" />
        <DeleteRecordGridButton />
    </Buttons>
</MainGrid>

Template-Column Editing

Pair a GridTemplateColumn's read-mode ChildContent with an EditChildContent to make a synthetic / composite column editable. The edit template receives a GridTemplateColumnEditContext — same row context as the read template (editCtx.Row.PrimaryRecord, the optional editCtx.Row.ParentRecord in a SubGrid, editCtx.DependsOnMetadata) plus an imperative editCtx.SetValue(columnName, value) helper.

EditChildContent fires only when the grid is editable (AllowEdit="true" AND the Editable toggle is on) and the row isn't pending-delete. Template columns that omit EditChildContent stay read-only even in edit mode — useful for actions columns that should always render the same buttons.

Pattern 1 — Drop-in standard editors

The most common case: the cell composes from multiple bound columns, and you want to let the user edit each one. Drop the matching <TextEdit> / <NumberEdit> / <ColumnEdit> editors inside EditChildContent — the framework cascades the row's primary record and matching EditContextValidator into that scope, so the editors self-register for dirty-tracking and validation. No extra wiring required.

<GridTemplateColumn Title="Full Name"
                    DependsOn="@(new[] { "firstname", "lastname" })"
                    SortBy="lastname">
    <ChildContent Context="ctx">
        <strong>
            @(ctx.Row.PrimaryRecord.GetValueOrDefault<StringValue>("firstname")?.Value)
            @(ctx.Row.PrimaryRecord.GetValueOrDefault<StringValue>("lastname")?.Value)
        </strong>
    </ChildContent>
    <!-- Drop-in editors — TextEdit auto-wires to dirty-tracking
         and validation via the cascading row context. -->
    <EditChildContent Context="editCtx">
        <FluentStack Orientation="Orientation.Horizontal" HorizontalGap="6"
                     VerticalAlignment="VerticalAlignment.Center">
            <TextEdit ColumnName="firstname"
                      DisplayLabelWhenAvailable="false"
                      DisplayTooltipWhenAvailable="false" />
            <TextEdit ColumnName="lastname"
                      DisplayLabelWhenAvailable="false"
                      DisplayTooltipWhenAvailable="false" />
        </FluentStack>
    </EditChildContent>
</GridTemplateColumn>

Pattern 2 — Custom widget with SetValue

When the editor surface doesn't map 1:1 to a Dataverse column — a single "First Last" text box that parses into two columns, a slider tied to multiple percent fields, a custom date-range picker writing start + end — render your own input and call editCtx.SetValue(columnName, value) for each affected column. The framework routes the write to the correct AliasedTableRecord and fires ValueChanged so dirty-tracking picks the change up.

<GridTemplateColumn Title="Full Name"
                    DependsOn="@(new[] { "firstname", "lastname" })"
                    SortBy="lastname">
    <ChildContent Context="ctx">
        @{
            var first = ctx.Row.PrimaryRecord.GetValueOrDefault<StringValue>("firstname")?.Value;
            var last  = ctx.Row.PrimaryRecord.GetValueOrDefault<StringValue>("lastname")?.Value;
        }
        <strong>@first @last</strong>
    </ChildContent>
    <EditChildContent Context="editCtx">
        @{
            var combined =
                  (editCtx.Row.PrimaryRecord.GetValueOrDefault<StringValue>("firstname")?.Value ?? "")
                + " "
                + (editCtx.Row.PrimaryRecord.GetValueOrDefault<StringValue>("lastname")?.Value ?? "");
        }
        <!-- Custom widget — split on space; consumer takes on
             validation since FluentTextField doesn't self-register. -->
        <FluentTextField Value="@combined.Trim()" ValueChanged="@(next =>
        {
            var parts = next.Split(' ', 2);
            editCtx.SetValue("firstname", new StringValue { Value = parts[0] });
            editCtx.SetValue("lastname",  new StringValue { Value = parts.Length > 1 ? parts[1] : null });
        })" />
    </EditChildContent>
</GridTemplateColumn>

Validation on the imperative path

Standard editors dropped into EditChildContent register with the row's EditContextValidator automatically and participate in the framework's validate-before-save gate. The editCtx.SetValue path bypasses that pipeline — values that didn't come from a registered editor aren't validated. If your custom widget needs to enforce constraints, run them inside the ValueChanged callback before calling SetValue, or fall back to the drop-in editor pattern.

Blazor

MainGrid Class

Parameters

Name
Type
Default
Description
AllowChangingItemsPerPagebool
True
When true, the user can change the number of items displayed per page.
AllowDownloadForFileColumnsbool
True
When true (the default), the grid renders a per-row download icon at the trailing edge of file and image column cells. Clicking it streams the file to the user's browser. Set to false to suppress the icon — for example on read-only audit grids where file export isn't allowed.
AllowEditbool
False
Should the option be available for the user to turn on inline editing for the grid.
AllowNavigateOnPrimaryNameClickbool
True
When true (the default) and the grid has a registered 'edit' button (a GridButton with IsOpenRecordButton=true), the cell that renders the table's primary-name column becomes a hyperlink. Clicking it dispatches the same per-row invocation that a row double-click would — so a user can jump to the edit form (or the navigated edit URL, depending on the registered button) without first selecting the row. Set to false to suppress the hyperlink and render the primary-name cell as plain text. Has no effect when no edit button is registered.
AllowNavigateOnRowDoubleClickbool
True
When true (the default) and the grid has a registered 'edit' button (a GridButton with IsOpenRecordButton=true), double-clicking a row invokes that button's GridButton.OnClick for the row's record — opening the edit dialog or navigating to the edit URL, whichever the button does. Set to false to suppress the double-click handler. Has no effect when no edit button is registered.
AllowPreviewForFileColumnsbool
True
When true (the default), the grid renders a per-row 'eye' preview icon at the trailing edge of file and image column cells whose contents can be rendered inline (images, PDFs, plain text). Set to false to suppress the icon — for example on grids where the columns shouldn't double as a preview entry point.
AllowSearchbool
True
Should the user be allowed to search the grid.
BorderVisiblebool
True
Controls whether a visible border is rendered around the grid.
ButtonsRenderFragment?
Optional render fragment used to define the button toolbar displayed above the grid.
ColumnsRenderFragment?
Optional GridColumns fragment carrying consumer-declared GridColumn children. When supplied, the grid switches to replace mode: only the declared columns render (in declared order), the FetchXML projection is rewritten to match, and the underlying view's column list is ignored. null leaves the grid in its default behavior (auto-generate columns from the view's resolved column set).
CustomViewDefinitionsList<GridViewDefinition>?
Custom views to display in the dropdown.
DataSourceViewDataSource?
Optional shared Data.ViewDataSource. When set, the grid reads its rows + total count from the datasource instead of issuing its own RetrieveRecordsAsync(System.String) call — the same datasource can drive a sibling <DataverseChart> or a second grid so they all paginate / filter / search together off one round-trip. Standalone usage (no GridBase.DataSource) keeps the existing internal-state machine — the grid composes FetchXML and fetches via IPowerPortalsProService directly. What the datasource does NOT own: per-grid UI state (selected rows, pending row creates / updates / deletes, column widths). Those stay grid-local — two grids sharing one datasource can still have independent selection and per-grid pending edits. When ViewDataSource.Highlight is set (e.g. via a chart slice click in cross-filter 'highlight' mode), rows whose value in the highlighted column doesn't match are visually muted via a CSS class; the row data + selection are unaffected (the soft cross-filter is purely styling).
DefaultItemsPerPageint
50
Default number of records to load on a page.
DefaultViewIdGuid?
Id of the view that the grid should display upon initial load.
Editablebool
False
Is inline editing turned on for the grid.
FullSizebool
False
When true, the grid expands to fill all available vertical space instead of using a fixed minimum height.
HidePagingbool
False
Force the page size and paging components to be hidden. Only do this when the number of items is known and the page size is set to something greater than the item count.
IncludeSearchInPersistedStatebool
False
When true, the active search text is included in the persisted state URL parameter (under the q field). Defaults to false — search terms can be sensitive, accumulate in browser history, and leak into HTTP referrers, so the grid keeps them out of the URL unless the consumer explicitly opts in. Has no effect when GridBase.PersistedStateQueryParameter is not set.
IsDirtybool
False
Indicates whether the grid has unsaved create, update, or delete operations pending.
LoadedRecordsIEnumerable<TableRecord>
Records currently rendered in the grid (the most recent page of results). Intended for toolbar commands that need to act on 'everything shown' — e.g. a bulk download button. Does not span pages; bulk-across-pages operations should run their own unpaged fetch instead.
MaxHeightstring?
Max Height that the grid control should expand to.
MinHeightstring?
250px
Minimum height that the grid control should occupy.
ModeGridMode
RecordSelection
Sets the behavioural mode of the grid, such as default interaction or record-selection mode.
PageSizesIEnumerable<int>
Collection of available page sizes for the grid.
PagingModeGridPagingMode
Paged
Determines whether the grid uses traditional paging or infinite-scroll virtualisation.
PersistedRowsSnapshotPersistedGridRowsSnapshot?
Server-prerender → interactive handoff for the rendered page of rows. The framework auto-persists this property at the end of prerender and re-hydrates it before GridBase.OnInitializedAsync on the interactive side, so the data fetch can be skipped on first interactive render. Keyed by render-tree position by the framework; the PersistedGridRowsSnapshot.ViewId field is checked at consumption time so a rerender against a different view discards the stale rows. Public per the framework's requirement — [PersistentState] only sees public properties via reflection — but not intended to be set externally.
PersistedStateQueryParameterstring?
Name of the URL query-string parameter to persist the grid's interactive state to. When set, the grid reads this parameter on initial load and seeds the active view, page number, page size, and sort from it; subsequent user actions (view pick, page change, header sort, etc.) write the new state back via Components.NavigationManager's replace-state path. Persistence survives page refresh and bookmarks.
SelectedRecordsIEnumerable<TableRecord>
Records that are currently selected in the Grid.
SelectFromEntireRowbool
True
When true, clicking anywhere on a row selects it; when false, only the checkbox selects the row.
SelectModeDataGridSelectMode
Multiple
Controls whether the grid allows single or multiple row selection.
TableNamestring?
The logical name of the table whose public views should be loaded. Only applicable when no values are specified for GridBase.DefaultViewId or GridBase.ViewIds.
Titlestring?
Name to display when the view dropdown is not displayed.
TransformViewAsyncFunc<GridViewDefinition, Task<GridViewDefinition>>?
Optional callback that runs immediately after a view is loaded and before the grid uses it to build columns or queries. Return a modified Models.GridViewDefinition to transform what the grid ultimately renders — for example, to ensure a specific column is always present regardless of the view's own configuration. Async so callers can consult metadata caches, services, or other async resources while deciding what to include.
ViewIdsIEnumerable<Guid>?
List of id's of the views that the grid should limit to in the view dropdown.
ViewSortViewSort
NameAscending
Sort order of the views in the view dropdown.
Name: AllowChangingItemsPerPage
Type: bool
Default: True
Description: When true, the user can change the number of items displayed per page.
Name: AllowDownloadForFileColumns
Type: bool
Default: True
Description: When true (the default), the grid renders a per-row download icon at the trailing edge of file and image column cells. Clicking it streams the file to the user's browser. Set to false to suppress the icon — for example on read-only audit grids where file export isn't allowed.
Name: AllowEdit
Type: bool
Default: False
Description: Should the option be available for the user to turn on inline editing for the grid.
Name: AllowNavigateOnPrimaryNameClick
Type: bool
Default: True
Description: When true (the default) and the grid has a registered 'edit' button (a GridButton with IsOpenRecordButton=true), the cell that renders the table's primary-name column becomes a hyperlink. Clicking it dispatches the same per-row invocation that a row double-click would — so a user can jump to the edit form (or the navigated edit URL, depending on the registered button) without first selecting the row. Set to false to suppress the hyperlink and render the primary-name cell as plain text. Has no effect when no edit button is registered.
Name: AllowNavigateOnRowDoubleClick
Type: bool
Default: True
Description: When true (the default) and the grid has a registered 'edit' button (a GridButton with IsOpenRecordButton=true), double-clicking a row invokes that button's GridButton.OnClick for the row's record — opening the edit dialog or navigating to the edit URL, whichever the button does. Set to false to suppress the double-click handler. Has no effect when no edit button is registered.
Name: AllowPreviewForFileColumns
Type: bool
Default: True
Description: When true (the default), the grid renders a per-row 'eye' preview icon at the trailing edge of file and image column cells whose contents can be rendered inline (images, PDFs, plain text). Set to false to suppress the icon — for example on grids where the columns shouldn't double as a preview entry point.
Name: AllowSearch
Type: bool
Default: True
Description: Should the user be allowed to search the grid.
Name: BorderVisible
Type: bool
Default: True
Description: Controls whether a visible border is rendered around the grid.
Name: Buttons
Type: RenderFragment?
Description: Optional render fragment used to define the button toolbar displayed above the grid.
Name: Columns
Type: RenderFragment?
Description: Optional GridColumns fragment carrying consumer-declared GridColumn children. When supplied, the grid switches to replace mode: only the declared columns render (in declared order), the FetchXML projection is rewritten to match, and the underlying view's column list is ignored. null leaves the grid in its default behavior (auto-generate columns from the view's resolved column set).
Name: CustomViewDefinitions
Type: List<GridViewDefinition>?
Description: Custom views to display in the dropdown.
Name: DataSource
Type: ViewDataSource?
Description: Optional shared Data.ViewDataSource. When set, the grid reads its rows + total count from the datasource instead of issuing its own RetrieveRecordsAsync(System.String) call — the same datasource can drive a sibling <DataverseChart> or a second grid so they all paginate / filter / search together off one round-trip. Standalone usage (no GridBase.DataSource) keeps the existing internal-state machine — the grid composes FetchXML and fetches via IPowerPortalsProService directly. What the datasource does NOT own: per-grid UI state (selected rows, pending row creates / updates / deletes, column widths). Those stay grid-local — two grids sharing one datasource can still have independent selection and per-grid pending edits. When ViewDataSource.Highlight is set (e.g. via a chart slice click in cross-filter 'highlight' mode), rows whose value in the highlighted column doesn't match are visually muted via a CSS class; the row data + selection are unaffected (the soft cross-filter is purely styling).
Name: DefaultItemsPerPage
Type: int
Default: 50
Description: Default number of records to load on a page.
Name: DefaultViewId
Type: Guid?
Description: Id of the view that the grid should display upon initial load.
Name: Editable
Type: bool
Default: False
Description: Is inline editing turned on for the grid.
Name: FullSize
Type: bool
Default: False
Description: When true, the grid expands to fill all available vertical space instead of using a fixed minimum height.
Name: HidePaging
Type: bool
Default: False
Description: Force the page size and paging components to be hidden. Only do this when the number of items is known and the page size is set to something greater than the item count.
Name: IncludeSearchInPersistedState
Type: bool
Default: False
Description: When true, the active search text is included in the persisted state URL parameter (under the q field). Defaults to false — search terms can be sensitive, accumulate in browser history, and leak into HTTP referrers, so the grid keeps them out of the URL unless the consumer explicitly opts in. Has no effect when GridBase.PersistedStateQueryParameter is not set.
Name: IsDirty
Type: bool
Default: False
Description: Indicates whether the grid has unsaved create, update, or delete operations pending.
Name: LoadedRecords
Type: IEnumerable<TableRecord>
Description: Records currently rendered in the grid (the most recent page of results). Intended for toolbar commands that need to act on 'everything shown' — e.g. a bulk download button. Does not span pages; bulk-across-pages operations should run their own unpaged fetch instead.
Name: MaxHeight
Type: string?
Description: Max Height that the grid control should expand to.
Name: MinHeight
Type: string?
Default: 250px
Description: Minimum height that the grid control should occupy.
Name: Mode
Type: GridMode
Default: RecordSelection
Description: Sets the behavioural mode of the grid, such as default interaction or record-selection mode.
Name: PageSizes
Type: IEnumerable<int>
Description: Collection of available page sizes for the grid.
Name: PagingMode
Type: GridPagingMode
Default: Paged
Description: Determines whether the grid uses traditional paging or infinite-scroll virtualisation.
Name: PersistedRowsSnapshot
Type: PersistedGridRowsSnapshot?
Description: Server-prerender → interactive handoff for the rendered page of rows. The framework auto-persists this property at the end of prerender and re-hydrates it before GridBase.OnInitializedAsync on the interactive side, so the data fetch can be skipped on first interactive render. Keyed by render-tree position by the framework; the PersistedGridRowsSnapshot.ViewId field is checked at consumption time so a rerender against a different view discards the stale rows. Public per the framework's requirement — [PersistentState] only sees public properties via reflection — but not intended to be set externally.
Name: PersistedStateQueryParameter
Type: string?
Description: Name of the URL query-string parameter to persist the grid's interactive state to. When set, the grid reads this parameter on initial load and seeds the active view, page number, page size, and sort from it; subsequent user actions (view pick, page change, header sort, etc.) write the new state back via Components.NavigationManager's replace-state path. Persistence survives page refresh and bookmarks.
Name: SelectedRecords
Type: IEnumerable<TableRecord>
Description: Records that are currently selected in the Grid.
Name: SelectFromEntireRow
Type: bool
Default: True
Description: When true, clicking anywhere on a row selects it; when false, only the checkbox selects the row.
Name: SelectMode
Type: DataGridSelectMode
Default: Multiple
Description: Controls whether the grid allows single or multiple row selection.
Name: TableName
Type: string?
Description: The logical name of the table whose public views should be loaded. Only applicable when no values are specified for GridBase.DefaultViewId or GridBase.ViewIds.
Name: Title
Type: string?
Description: Name to display when the view dropdown is not displayed.
Name: TransformViewAsync
Type: Func<GridViewDefinition, Task<GridViewDefinition>>?
Description: Optional callback that runs immediately after a view is loaded and before the grid uses it to build columns or queries. Return a modified Models.GridViewDefinition to transform what the grid ultimately renders — for example, to ensure a specific column is always present regardless of the view's own configuration. Async so callers can consult metadata caches, services, or other async resources while deciding what to include.
Name: ViewIds
Type: IEnumerable<Guid>?
Description: List of id's of the views that the grid should limit to in the view dropdown.
Name: ViewSort
Type: ViewSort
Default: NameAscending
Description: Sort order of the views in the view dropdown.

Events

Name
Type
Description
EditableChangedEventCallback<bool>
Callback invoked when the inline editing state changes.
SelectedRecordsChangedEventCallback<IEnumerable<TableRecord>>
Callback invoked when the selected records collection changes.
Name: EditableChanged
Type: EventCallback<bool>
Description: Callback invoked when the inline editing state changes.
Name: SelectedRecordsChanged
Type: EventCallback<IEnumerable<TableRecord>>
Description: Callback invoked when the selected records collection changes.

Methods

Name
Parameters
Type
Description
ClearSelectionAsyncTask
Clears all currently selected rows.
OpenFileDownloadAsyncTableRecord record
string columnName
Task
Fetches the file/image column's bytes for record and streams them to the user's browser as a download. Invoked by the per-row download icon in file and image cells.
OpenFilePreviewAsyncTableRecord record
string columnName
Task
Opens the inline preview dialog for the file/image column columnName on record. Invoked by the per-row preview icon in file/image cells and also available to composing components (for example, a toolbar button on a wrapping grid) that want a programmatic entry point.
RefreshAsyncbool forceRefresh
Task
Instructs the grid to re-fetch and render the current data from the supplied data source.
Validatebool
Validates all editable rows in the grid.
Name: ClearSelectionAsync
Type: Task
Description: Clears all currently selected rows.
Name: OpenFileDownloadAsync
Parameters: TableRecord record
string columnName
Type: Task
Description: Fetches the file/image column's bytes for record and streams them to the user's browser as a download. Invoked by the per-row download icon in file and image cells.
Name: OpenFilePreviewAsync
Parameters: TableRecord record
string columnName
Type: Task
Description: Opens the inline preview dialog for the file/image column columnName on record. Invoked by the per-row preview icon in file/image cells and also available to composing components (for example, a toolbar button on a wrapping grid) that want a programmatic entry point.
Name: RefreshAsync
Parameters: bool forceRefresh
Type: Task
Description: Instructs the grid to re-fetch and render the current data from the supplied data source.
Name: Validate
Type: bool
Description: Validates all editable rows in the grid.
React