DevExpress WPF中文教程:Data Grid - 如何使用虚拟源?(二)

DevExpress WPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件的衍伸产品,还是以数据为中心的商业智能产品,都能通过DevExpress WPF控件来实现。

本文将为大家一步一步演示如何在一个MVVM应用程序中使用虚拟源。

注意 :本教程使用Issues Service作为示例数据源,使用InfiniteAsyncSource作为虚拟数据源。

获取DevExpress WPF v25.1正式版下载

Step 2:启用排序操作

开发者可以允许用户在GridControl中对行进行排序,完成以下步骤:

  1. 在虚拟源中实现排序操作。
  2. 在GridControl中启用排序操作。
订单排序

Issues Service(问题服务)允许您应用以下排序顺序:

  • Default(默认) -- 记录按照从最新到最老的顺序显示。
  • Created Date(已创建日期) -- 记录按最新到最老的顺序显示。
  • Votes (投票)-- 记录按升序或降序显示。

C#

cs 复制代码
public enum IssueSortOrder {
Default,
CreatedDescending,
VotesAscending,
VotesDescending
}

下面的代码片段在GridControl中实现了默认的排序顺序:

C#

cs 复制代码
[Command]
public void FetchIssues(FetchRowsAsyncArgs args) {
args.Result = GetIssuesAsync(args);
}
async Task<FetchRowsResult> GetIssuesAsync(FetchRowsAsyncArgs args) {
var take = args.Take ?? 30;
var issues = await IssuesService.GetIssuesAsync(
skip: args.Skip,
take: take,
sortOrder: GetIssueSortOrder(args.SortOrder),
filter: null
);

return new FetchRowsResult(issues, hasMoreRows: issues.Length == take);
}
static IssueSortOrder GetIssueSortOrder(SortDefinition[] sortOrder) {
return IssueSortOrder.Default;
}
实现细节

在虚拟源中实现排序操作

  1. 使用SortDefinition类实例获取GridControl排序选项。
  2. 解析排序选项并返回排序顺序,绑定到InfiniteAsyncSourceFetchRowsCommand属性的任何命令都在GridControl获取行时使用排序顺序。

C#

cs 复制代码
static IssueSortOrder GetIssueSortOrder(SortDefinition[] sortOrder) {
if (sortOrder.Length > 0) {
var sort = sortOrder.Single();
if (sort.PropertyName == "Created") {
if (sort.Direction != ListSortDirection.Descending)
throw new InvalidOperationException();
return IssueSortOrder.CreatedDescending;
}
if (sort.PropertyName == "Votes") {
return sort.Direction == ListSortDirection.Ascending
? IssueSortOrder.VotesAscending
: IssueSortOrder.VotesDescending;
}
}
return IssueSortOrder.Default;
}
启用"Votes"列排序操作
  1. ColumnBase.AllowSorting属性赋值true。
  2. ColumnBase.DefaultSortOrder属性设置为Descending来指定默认排序顺序,当用户第一次单击列的标题时应用此顺序。

xml

XML 复制代码
<dxg:GridColumn FieldName="Votes"
AllowSorting="True"
DefaultSortOrder="Descending"/>
启用"Created Date"列排序操作
  1. ColumnBase.AllowSorting属性赋值true。
  2. Issues Service只能按已创建日期字段降序对行进行排序,将ColumnBase.AllowedSortOrders属性设置为Descending,来从UI中禁用该列的其他排序顺序。

xml

XML 复制代码
<dxg:GridColumn FieldName="Created"
AllowSorting="True"
AllowedSortOrders="Descending"/>

在本教程中,Issues Service只能按单列对数据进行排序。如果您的数据源可以按多列排序数据,请将GridViewBase.AllowGroupingSortingBySingleColumnOnly属性设置为False。在这种情况下,GridControl可以按多列排序,用户应按住Shift键并单击所需的列标题,以便根据这些列对数据进行排序。

更改排序顺序

Created Date列允许用户仅按降序对数据进行排序。当用户单击列标题时,GridControl不会更改排序顺序,用户应按住Ctrl键并单击列标题来清除列的排序顺序。

将DataViewBaseColumnSortClearMode属性设置为Click,这允许用户通过单击列标题应用或清除排序顺序:

xml

XML 复制代码
<dxg:GridControl.View>
<dxg:TableView ColumnSortClearMode="Click"/>
</dxg:GridControl.View>
相关推荐
WPF工业上位机7 小时前
匠心研智造,同心赴新程-WPF硬件通讯之串口&Socket
wpf
步步为营DotNet11 小时前
洞悉.NET 11:Blazor 与 Microsoft.Extensions.AI 的融合创新实践
人工智能·microsoft·.net
回忆2012初秋12 小时前
.NET 8.0 实战:基于 MQTTnet 封装高可用的 MQTT 发布/订阅工具类
开发语言·mqtt·.net
回忆2012初秋13 小时前
.NET 8.0 工业物联网实战:基于 S7netplus 封装高可用西门子 PLC 通信类
物联网·.net
爱炸薯条的小朋友14 小时前
C#由窗体原子表溢出造成的软件闪退,根本原因补充
开发语言·c#·wpf
晚风一隅1 天前
阿里云盘古存储系统:EB级分布式存储的架构革命与技术突破
wpf
学以智用2 天前
.NET Core 仓储模式(Repository Pattern)完整教程
后端·.net
.NET修仙日记2 天前
.NET EFCore批量插入性能优化实战:30秒 → 0.5秒
性能优化·c#·.net·.netcore·微软技术·efcore·踩坑实录
步步为营DotNet2 天前
深挖.NET 11:.NET Aspire 在云原生应用状态管理的创新与实践
云原生·.net·wpf
我是唐青枫2 天前
C#.NET YARP 跨域配置详解:网关统一处理 CORS
开发语言·c#·.net