VirtualServerModeSource.MoreRows Event
Fires when a bound grid control asks the data source for a new batch of rows.
Namespace: DevExpress.Data
Assembly: DevExpress.Data.v24.1.dll
NuGet Package: DevExpress.Data
Declaration
Event Data
The MoreRows event's data class is VirtualServerModeRowsEventArgs. The following properties provide information specific to this event:
Property | Description |
---|---|
CancellationToken | Gets a token that allows you to respond to a task cancellation request invoked by the grid control. |
ConfigurationInfo | Gets information on the grid’s current sorting, filtering and summary configuration. |
CurrentRowCount | Gets the count of rows currently loaded to the grid. |
RowsTask | Gets or sets the task that returns requested rows. |
UserData |
Read this parameter to get custom data passed from the previously called Task or ConfigurationChanged event handler. When handling the VirtualServerModeSource.ConfigurationChanged event, set the UserData event parameter to pass custom data to a subsequent VirtualServerModeSource.MoreRows event handler (unless you specify the RowsTask event parameter). |
Remarks
To provide a batch of rows, create a Task that returns requested rows and assign it to the RowTask event parameter.
Tip
A Task typically executes asynchronously. To return a batch of rows synchronously, create the task with the Task.FromResult method (available in .NET Framework 4.5+).
The VirtualServerModeSource supports two data supplying scenarios:
- Handle the VirtualServerModeSource.ConfigurationChanged event to perform a source initialization and supply an initial batch of rows. Handle the MoreRows event to supply subsequent batches of rows (when required).
Handle the VirtualServerModeSource.ConfigurationChanged event to perform a source initialization (when required). Handle the MoreRows event to supply all (initial and subsequent) batches of rows. If you handle the VirtualServerModeSource.ConfigurationChanged event, this event’s RowTask parameter should be left unassigned.
Example
This example demonstrates how to create a WinForms Grid Control and bind it to a virtual server mode source.
using System.Windows.Forms; using System.Collections.Generic; using DevExpress.Data; using DevExpress.XtraGrid; using DevExpress.XtraEditors; namespace DXApplication { public partial class Form1 : XtraForm { public Form1() { InitializeComponent(); // Creates and initializes a virtual data source. VirtualServerModeSource virtualServerModeSource = new VirtualServerModeSource(); virtualServerModeSource.RowType = typeof(Product); virtualServerModeSource.ConfigurationChanged += virtualServerModeSource_ConfigurationChanged; virtualServerModeSource.MoreRows += virtualServerModeSource_MoreRows; // Creates a grid control and binds it to the virtual data source. GridControl gridControl = new GridControl(); gridControl.Parent = this; gridControl.Dock = DockStyle.Fill; gridControl.DataSource = virtualServerModeSource; } int batchSize = 20; int maxRowCount = 500; private void virtualServerModeSource_ConfigurationChanged(object sender, DevExpress.Data.VirtualServerModeRowsEventArgs e) { e.UserData = GetRows(0); } private void virtualServerModeSource_MoreRows(object sender, DevExpress.Data.VirtualServerModeRowsEventArgs e) { e.RowsTask = System.Threading.Tasks.Task.Factory.StartNew(() => { bool moreRows = e.CurrentRowCount < maxRowCount - batchSize; return new VirtualServerModeRowsTaskResult(GetRows(e.CurrentRowCount), moreRows, e.UserData); }, e.CancellationToken); } List<Product> GetRows(int startRowIndex) { List<Product> lst = new List<Product>(); for (int i = startRowIndex; i < startRowIndex + batchSize; i++) lst.Add(new Product { ID = i, Name = $"Product{i}" }); return lst; } } public class Product { public int ID { get; set; } public string Name { get; set; } } }