Blazor的Telerik UI?下载30天免费试用

与OnRead事件绑定数据

本文介绍了OnRead事件,并描述如何使用它来数据绑定Telerik Blazor组件。

目的和收益

向组件提供数据的最简单方法是设置组件的数据参数IEnumerable < T >。这允许组件拥有所有数据项,并在内部执行所有数据操作(筛选、分页、排序等)。然而,这种情况并不总是最优的。

有两个主要原因使用OnRead事件:性能而且定制

性能

大量数据需要按需加载。这样可以提高数据库、后端、网络和浏览器的性能。当组件触发时OnRead,它期望收到只呈现数据项。确切的数字取决于组件页大小参数。

OnRead还卸载组件外部的数据操作,例如在远程服务器上。这可以提高WebAssembly应用程序的性能。

定制

OnRead允许完全控制数据操作。例如,如果内置的排序和过滤算法不适合给定的场景,则可以使用自定义排序和过滤算法。这里只是一些例子,但还有更多可能的场景:

OnRead使数据绑定到OData万博体育手机版网址

OnRead还允许应用程序知道用户当前看到的确切数据项。

带有OnRead事件的组件

下面的Blazor组件公开了一个OnRead事件。获得性能好处,使用事件一起配合分页虚拟化(也称为虚拟滚动)。

每个组件名称都指向特定于组件的OnRead文档和示例:

组件 支持分页 支持虚拟化
自动完成 - 自动完成虚拟化
组合框 - 组合框的虚拟化
DropDownList - DropDownList虚拟化
网格 网格分页 网格行虚拟化
列表视图 ListView分页 -
多选 - 多选虚拟化

TreeList树状视图不要有OnRead事件。相反,它们通过OnExpand事件。

事件参数

OnRead事件处理程序接收参数,该参数继承自ReadEventArgs。确切的类型取决于组件。例如,网格处理程序接收GridReadEventArgs。ComboBox处理程序接收ComboBoxReadEventArgs等等。

事件参数对象的以下属性对所有对象都是通用的具有OnRead事件。其他属性将在特定于组件的文章中讨论。

财产 类型 描述
请求 DataSourceRequest 该对象携带有关请求数据项的信息。它将显示页面索引或虚拟滚动偏移量、排序和过滤状态等。
数据 IEnumerable 将其设置为的数据项,组件将渲染
总计 int 将其设置为总数的物品。这个值将帮助组件生成它的寻呼机虚拟滚动条正确。

使用DataSourceRequest属性

async Task GridReadHandler(GridReadEventArgs args){//新页面是什么?// args.Request.Page //页面大小(返回多少项)?// args.Request.PageSize //用户在虚拟场景中滚动了多少行?// args.Request.Skip}

DataSourceRequest对象可以序列化并发送到远程服务器使用System.Text.Json序列化器

ToDataSourceResult方法

DataSourceRequest对象提供有关所需数据的信息。问题是如何最容易地检索这些数据。有时OnRead数据绑定称为“手动”,但在大多数情况下,它根本不必是手动的。解决办法是ToDataSourceResult

ToDataSourceResult扩展方法能够从中提取所请求的数据项IEnumerable,这个IQueryable而且数据表。该方法是Telerik DataSource Extensions。它期望DataSourceRequest论点。

ToDataSourceResult返回一个DataSourceResult对象。它最重要的属性是:

财产 类型 描述
数据 IEnumerable 要呈现的数据项块(页)。已经应用了所有数据操作(排序、筛选等)
总计 int 数据源中项的总数。

数据而且总计的属性DataSourceRequest而且DataSourceResult匹配,并允许轻松赋值:

使用ToDataSourceResult

IEnumerable AllGridData {get;设置;} async Task GridReadHandler(GridReadEventArgs args) {DataSourceResult result = AllGridData.ToDataSourceResult(args. request);arg游戏。数据= result.Data; args.Total = result.Total; args.AggregateResults = result.AggregateResults; // Grid only }

ToDataSourceResultAsync的可等待(异步)替代方法吗ToDataSourceResult

它是可以使用的DataSourceRequest,ToDataSourceResult而且ToDataSourceResultAsync在与特定Telerik组件无关的场景中。

例子

让我们想象一下,我们的数据源包含1000个项目,而我们只想向Grid发送一页项目。

  1. 导入Telerik.DataSource.Extensions名称空间。
  2. 设置网格的TItem参数设置为模型类型。(有些组件需要TValue参数来定义值类型,而不是Grid。使用TValue使用自动完成、组合框、下拉列表和多选功能。)
  3. 订阅OnRead事件。使用异步任务而不是异步无效。事件处理程序接收一个GridReadEventArgs论点。我们给它命名arg游戏
  4. 使用arg游戏。请求而且ToDataSourceResult ()获取一页网格数据。可以根据用户的操作对数据进行筛选和排序。
  5. arg游戏。数据到要呈现的数据项。
  6. arg游戏。总计到数据项的总数(1000)。

使用OnRead事件

@using telerikk . datasource . extensions  

OnGridRead fired at: @LastOnRead

@code {private List GridData {get;设置;}私有字符串LastOnRead {get;设置;} //总是使用async Task,而不是async void private async Task OnGridRead(GridReadEventArgs args) {var result = GridData.ToDataSourceResult(args. request);arg游戏。数据= result.Data; args.Total = result.Total; var now = DateTime.Now; LastOnRead = now.ToLongTimeString() + "." + now.Millisecond; } protected override void OnInitialized() { GenerateData(); base.OnInitialized(); } private void GenerateData() { GridData = new List(); for (int i = 1; i <= 1000; i++) { GridData.Add(new SampleModel() { Id = i, Text = $"Grid Text {i}" }); } } public class SampleModel { public int Id { get; set; } public string Text { get; set; } } }

刷新数据

组件触发OnRead用户执行某个操作(如分页、排序、虚拟滚动等)时的事件。调用OnRead手动处理程序将不起作用,因为组件将不会跟踪方法参数。

所有带有OnRead事件有一个重新绑定方法也是。要以编程方式刷新组件数据,请调用此方法。它将迫使组件发射OnRead并接收新的数据。

使用OnRead时重新绑定下拉列表和网格

@using telerikdatasource . extensions   @context. txtId: @context。Text   重新绑定组件 

< TelerikGrid @ref="@TheGrid" TItem="@SampleModel" OnRead="@OnGridRead" AutoGenerateColumns="true" Sortable="true" Pageable="true" PageSize="5" /> @code {TelerikGrid TheGrid {get;设置;} TelerikDropDownList TheDropDown {get;设置;} List GridData {get; set; } List DropDownData { get; set; } int DropDownValue { get; set; } = 1; void RebindComponents() { GenerateData(); // simulate change in the data TheGrid.Rebind(); TheDropDown.Rebind(); } async Task OnGridRead(GridReadEventArgs args) { var result = GridData.ToDataSourceResult(args.Request); args.Data = result.Data; args.Total = result.Total; } async Task OnDropDownRead(DropDownListReadEventArgs args) { var result = DropDownData.ToDataSourceResult(args.Request); args.Data = result.Data; args.Total = result.Total; } protected override void OnInitialized() { GenerateData(); base.OnInitialized(); } void GenerateData() { GridData = new List(); DropDownData = new List(); var rnd = new Random(); for (int i = 1; i <= 10; i++) { GridData.Add(new SampleModel() { Id = i, Text = $"Text {rnd.Next(1, 100)}" }); DropDownData.Add(new SampleModel() { Id = i, Text = $"Text {rnd.Next(1, 100)}" }); } } public class SampleModel { public int Id { get; set; } public string Text { get; set; } } }

另请参阅

在本文中
Baidu
map