104 lines
5.1 KiB
Markdown
104 lines
5.1 KiB
Markdown
# MgGrid — Parameters & Events
|
|
|
|
> Part of the MgGrid system. See `README.md` for overview and component hierarchy.
|
|
|
|
## Required Parameters
|
|
|
|
| Parameter | Type | Description |
|
|
|---|---|---|
|
|
| `SignalRClient` | `AcSignalRClientBase` | SignalR client for server communication |
|
|
| `Logger` | `TLoggerClient` | Logger instance |
|
|
| `GetAllMessageTag` | `int` | SignalR tag for loading all items |
|
|
|
|
## CRUD Message Tags
|
|
|
|
| Parameter | Type | Description |
|
|
|---|---|---|
|
|
| `GetAllMessageTag` | `int` | Tag for "get all items" request |
|
|
| `GetItemMessageTag` | `int` | Tag for "get single item" request |
|
|
| `AddMessageTag` | `int` | Tag for "add item" request |
|
|
| `UpdateMessageTag` | `int` | Tag for "update item" request |
|
|
| `RemoveMessageTag` | `int` | Tag for "remove item" request |
|
|
|
|
These are bundled into a `SignalRCrudTags` during `OnInitializedAsync`. See `AyCode.Services/docs/SIGNALR_DATASOURCE/README.md` (in AyCode.Core repo) for details.
|
|
|
|
## Data & Context Parameters
|
|
|
|
| Parameter | Type | Description |
|
|
|---|---|---|
|
|
| `DataSource` | `IList<TDataItem>` | Bind with `AcObservableCollection<TDataItem>` for external data. If not set, grid creates its own. |
|
|
| `ParentDataItem` | `IId<TId>?` | Parent entity for detail grids. `null` = master grid. |
|
|
| `KeyFieldNameToParentId` | `string?` | Property name on `TDataItem` that references the parent's ID |
|
|
| `ContextIds` | `object[]?` | Additional context passed to `AcSignalRDataSource` constructor |
|
|
| `FilterText` | `string?` | Text filter — propagated to data source, triggers reload |
|
|
|
|
## Display & Behavior Parameters
|
|
|
|
| Parameter | Type | Default | Description |
|
|
|---|---|---|---|
|
|
| `Caption` | `string` | `typeof(TDataItem).Name` | Grid title (shown in fullscreen header) |
|
|
| `GridName` | `string` | `"{TDataItem.Name}Grid"` | Name used in log messages |
|
|
| `AutoSaveLayoutName` | `string?` | `"Grid{TDataItem.Name}"` | Base name for layout storage keys |
|
|
| `EnableServerLayouts` | `bool` | `true` | Roams the UserSave layout tier via the SignalR server endpoint (see `MGGRID_LAYOUT.md` → Server Roaming). Server calls happen only on the Save/Load layout buttons. |
|
|
|
|
## Quick-Filter Panel
|
|
|
|
| Parameter | Type | Default | Description |
|
|
|---|---|---|---|
|
|
| `FilterPanel` | `RenderFragment?` | `null` | Quick-filter controls rendered above the grid; the slot wraps them in a styled `.mg-grid-filter-panel` container. When set, the toolbar shows a Show/Hide Filters toggle (`MGGRID_TOOLBAR.md`). |
|
|
| `ShowFilterPanel` | `bool` | `true` | Initial visibility of the filter panel; the toolbar toggle flips it at runtime (`IsFilterPanelVisible` / `ToggleFilterPanel`). |
|
|
|
|
Place `MgTagBox` controls (from `Components/`) in the slot. Each control applies a per-field `IN(FieldName, selected...)` criteria via `IMgGridBase.SetFieldQuickFilter` → DevExpress `SetFieldFilterCriteria`; DevExpress AND-combines the per-field criteria with each other and with the user's filter row automatically (no clobber). Empty selection clears that field's filter.
|
|
|
|
```razor
|
|
<FilterPanel>
|
|
<MgTagBox TData="string" TValue="string" FieldName="Status"
|
|
Data="@_statusOptions" NullText="All statuses" />
|
|
</FilterPanel>
|
|
```
|
|
|
|
Implementation note: imperative `Values` writes inside DevExpress editors must be wrapped in `BeginUpdate()`/`EndUpdate()` (the parameter tracker throws otherwise) — `MgTagBox` handles this internally.
|
|
|
|
Design + the server-side forward path (`FilterMode.Server`): AyCode.Core repo `docs/adr/0004-signalr-datasource-server-side-filtering.md`.
|
|
|
|
## Event Callbacks
|
|
|
|
All grid events are re-exposed with `OnGrid` prefix to avoid collisions with `DxGrid` base events:
|
|
|
|
| Event | DxGrid Equivalent | When Fired |
|
|
|---|---|---|
|
|
| `OnGridItemDeleting` | `DataItemDeleting` | Before item removal (can cancel via `e.Cancel`) |
|
|
| `OnGridEditModelSaving` | `EditModelSaving` | Before item save (can cancel via `e.Cancel`) |
|
|
| `OnGridEditStart` | `EditStart` | When edit mode begins |
|
|
| `OnGridCustomizeEditModel` | `CustomizeEditModel` | When edit model is being prepared |
|
|
| `OnGridFocusedRowChanged` | `FocusedRowChanged` | When focused row changes |
|
|
| `OnDataSourceChanged` | — | After data source is loaded/reloaded |
|
|
| `OnGridItemChanged` | — | After server confirms a CRUD operation |
|
|
| `OnGridItemChanging` | — | Before a CRUD operation is sent to server |
|
|
|
|
Internal event wiring (in `SetParametersAsyncCore`, first call):
|
|
|
|
| DxGrid Event | → Internal Handler |
|
|
|---|---|
|
|
| `DataItemDeleting` | `OnItemDeleting` |
|
|
| `EditModelSaving` | `OnItemSaving` |
|
|
| `CustomizeEditModel` | `OnCustomizeEditModel` |
|
|
| `FocusedRowChanged` | `OnFocusedRowChanged` |
|
|
| `EditStart` | `OnEditStart` |
|
|
| `EditCanceling` | `OnEditCanceling` |
|
|
|
|
## Default Grid Settings
|
|
|
|
Set in `SetParametersAsyncCore` (first call only):
|
|
|
|
| Setting | Value |
|
|
|---|---|
|
|
| `KeyFieldName` | `"Id"` |
|
|
| `TextWrapEnabled` | `false` |
|
|
| `AllowSelectRowByClick` | `true` |
|
|
| `HighlightRowOnHover` | `true` |
|
|
| `AutoCollapseDetailRow` | `true` |
|
|
| `AutoExpandAllGroupRows` | `false` |
|
|
|
|
Project adapters typically add more defaults in `OnParametersSet` (e.g., `EditMode`, `FocusedRowEnabled`, `PageSize`, `ShowFilterRow`, `SizeMode` based on `IsMasterGrid`).
|