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>
相关推荐
beyond谚语20 小时前
第三章 布局
wpf
玩泥巴的1 天前
解放双手!使用Roslyn生成代码让你的 HTTP 客户端开发变得如此简单
c#·.net·代码生成·roslyn
蒲公英源码1 天前
超市进销存源码
sqlserver·c#·.net
Aevget1 天前
界面控件DevExpress WPF v25.1新版亮点:数据管理功能全新升级
.net·wpf·界面控件·devexpress·ui开发
baivfhpwxf20231 天前
要在 WPF 中实现数据表对应实体的属性与 UI 控件的双向绑定,并支持修改通知和 UI 自动更新
c#·wpf
忧郁的蛋~1 天前
.NET异步编程中内存泄漏的终极解决方案
开发语言·前端·javascript·.net
极客智造2 天前
深入解析 WPF 中的 DataTemplateSelector:动态模板选择的艺术
wpf
极客智造2 天前
WPF 高级 UI 定制:深入解析 VisualStateManager 与 Adorner
wpf
天马37982 天前
.net 8.0 System.InvalidOperationException:“Session has not been configured
.net