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>
相关推荐
缺点内向5 小时前
C#: 告别繁琐!轻松移除Word文档中的文本与图片水印
c#·自动化·word·.net
2501_930707786 小时前
使用 C# .NET 从 PowerPoint 演示文稿中提取背景图片
c#·powerpoint·.net
User_芊芊君子11 小时前
【分布式训练】CANN SHMEM跨设备内存通信库:构建高效多机多卡训练的关键组件
分布式·深度学习·神经网络·wpf
向上的车轮11 小时前
为什么.NET(C#)转 Java 开发时常常在“吐槽”Java:checked exception
java·c#·.net
波波00712 小时前
每日一题:.NET 的 GC是如何分代工作的?
算法·.net·gc
波波0071 天前
每日一题:中间件是如何工作的?
中间件·.net·面试题
无风听海2 天前
.NET 10之可空引用类型
数据结构·.net
就是有点傻2 天前
WPF按钮走马灯效果
wpf
zuozewei2 天前
虚拟电厂聚合商平台安全技术体系深度解读
安全·wpf
极客智造2 天前
WPF 自定义控件:AutoGrid 实现灵活自动布局的网格控件
wpf