RemoteView and Data Management
RemoteView<TItem> is the data source that powers Serenity grids. It implements IRemoteView (which extends SleekGrid's IDataView) and adds server-side data operations on top: loading, sorting, paging, filtering, and grouping.
A grid's view property holds its RemoteView. You rarely create one directly — DataGrid does it for you — but understanding it helps you customize how grids load and refresh data.
What RemoteView Does
- Loads data from the server — calls the list service (e.g.
LanguageService.List) with the current request parameters. - Sorting — sends the sort columns to the server (or sorts locally when
localSortis enabled). - Paging — tracks the current page and page size, and sends
Skip/Takein the request. - Filtering — applies quick filters and advanced filters to the request.
- Grouping — supports server-side grouping and group totals.
The Request
When the view loads data, it builds a ListRequest:
Skip— computed from(page - 1) * rowsPerPage.Take— the page size (rowsPerPage).Sort— the current sort expressions (e.g.["Name"]or["Name desc"]).- Additional parameters from
view.params(quick filters, advanced filters, etc.).
The request is sent to view.url (the service base URL) via serviceCall.
Key Members
Options (RemoteViewOptions)
| Option | Description |
|---|---|
url |
The service endpoint URL for data requests. |
autoLoad |
When true, loads data immediately on construction. |
rowsPerPage |
Number of rows per page (0 for no paging). |
seekToPage |
Initial page number to seek to on first load. |
sortBy |
Initial sort criteria (string or array, e.g. "Name desc"). |
params |
Additional parameters to include in every request. |
idField |
Name of the field containing unique item identifiers (default "id"). |
localSort |
When true, sorts locally instead of server-side. |
filter |
A filter function applied to the data. |
onSubmit |
Callback invoked before submitting a request; return false to cancel. |
onAjaxCall |
Callback invoked before AJAX calls are made. |
onProcessData |
Callback to process data received from the server. |
getItemMetadata |
Callback to get metadata for individual items. |
Data Access
getItems()— all items in the view.getItemById(id)— an item by its id.getItemByIdx(i)— an item by its index.getLength()— the number of rows (including group/totals rows).getRows()— the current rows (items, groups, and totals).getFilteredItems()— the filtered items.
Paging
getPagingInfo()— returns{ rowsPerPage, actualRowsPerPage, page, totalCount, loading, error, dataView }.getTotalCount()— the total number of records on the server.seekToPage— the page to seek to when loading.
rowsPerPage reports the page size requested by the grid, while actualRowsPerPage tracks the page size applied by the server (from the response's Take). When server-side paging limits (RequestHandlerSettings.DefaultPageSize / MaxPageSize) clamp the requested size, paging calculations use actualRowsPerPage so the grid stays correct — see Server-Side Page Size Limits.
Sorting
sortBy— the current sort expressions.sort(comparer, ascending)— sorts locally with a custom comparer.
Grouping
setGrouping(groupingInfo)— configures grouping levels.getGroups()— the current groups.getGrandTotals()— the grand totals.expandGroup/collapseGroup/expandAllGroups/collapseAllGroups— group expansion.
Refreshing
populate()— loads data from the server.refresh()— refreshes the view (re-applies local filtering/grouping).beginUpdate()/endUpdate()— batch multiple changes into one refresh.populateLock()/populateUnlock()— temporarily prevent loading.
Events
onDataLoading— fired when data loading begins.onDataLoaded— fired when data loading completes.onDataChanged— fired when the underlying data changes.onPagingInfoChanged— fired when paging information changes.onRowCountChanged/onRowsChanged/onRowsOrCountChanged— fired when rows change.onGroupCollapsed/onGroupExpanded— fired when groups are toggled.
Accessing the View from a Grid
The grid's view property exposes the RemoteView:
class MyGrid extends EntityGrid<MyRow, any> {
// ...
someMethod() {
const items = this.view.getItems();
const paging = this.view.getPagingInfo();
this.view.populate(); // reload from the server
}
}
See Also
- RemoteView (API reference) — the full
RemoteViewAPI. - IRemoteView (API reference) — the view contract.
- RemoteViewOptions (API reference) — view configuration.
- DataGrid Architecture — how the view fits into the grid stack.
- Creating and Configuring Grids — building grids step by step.
- Filtering and Quick Search — how filters feed the view.
- Frontend Framework Overview — the three client-side packages and how they fit together.