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

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

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

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

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

Step 4:显示摘要

您可以显示关于行组或单个数据列的摘要信息,完成以下步骤:

  1. 在虚拟源中处理摘要。

  2. 在GridControl中显示摘要。

摘要类型

Issues Service允许您获得:

  • 行的总数。
  • 最后创建的DateTime对象。

C#

cs 复制代码
public class IssuesSummaries {
public int Count { get; private set; }
public DateTime? LastCreated { get; private set; }
}
实现细节

在虚拟源中处理摘要

  1. 创建一个使用IssuesService.GetSummariesAsync方法从数据源获取摘要的任务。

  2. 使用Summaries属性获取GridControl摘要项。

  3. 创建GetTotalSummaries命令。

  4. 获取与GridControl摘要项对应的数据源摘要列表,并将该列表分配给Result属性。

  5. 将GetTotalSummaries命令绑定到InfiniteAsyncSource.GetTotalSummariesCommand

C#

cs 复制代码
[Command]
public void GetTotalSummaries(GetSummariesAsyncArgs args) {
args.Result = GetTotalSummariesAsync(args);
}
static async Task<object[]> GetTotalSummariesAsync(GetSummariesAsyncArgs args) {
var summaryValues = await IssuesService.GetSummariesAsync((IssueFilter)args.Filter);
return args.Summaries.Select(x => {
if(x.SummaryType == SummaryType.Count)
return (object)summaryValues.Count;
if(x.SummaryType == SummaryType.Max && x.PropertyName == "Created")
return summaryValues.LastCreated;
throw new InvalidOperationException();
}).ToArray();
}

xml

XML 复制代码
<dxg:GridControl.ItemsSource>
<dx:InfiniteAsyncSource ElementType="{x:Type local:IssueData}"
FetchRowsCommand="{Binding FetchIssuesCommand}"
GetUniqueValuesCommand="{Binding GetUniqueValuesCommand}"
GetTotalSummariesCommand="{Binding GetTotalSummariesCommand}"/>
</dxg:GridControl.ItemsSource>

显示固定摘要面板

启用DataViewBase.ShowFixedTotalSummary属性来显示固定摘要面板:

xml

XML 复制代码
<dxg:GridControl.View>
<dxg:TableView ShowFixedTotalSummary="True"/>
</dxg:GridControl.View>

显示总摘要

指定GridControl.TotalSummary属性在GridControl中显示总的摘要:

xml

XML 复制代码
<dxg:GridControl.TotalSummary>
<dxg:GridSummaryItem SummaryType="Count" Alignment="Right"/>
<dxg:GridSummaryItem SummaryType="Max" FieldName="Created"
DisplayFormat="{}Last created: {0}"
Alignment="Right"/>
</dxg:GridControl.TotalSummary>
显示自定义摘要

Issues Service可以计算Median和StdDev值:

C#

cs 复制代码
public class IssuesSummaries {
// ...
public double VotesMedian { get; private set; }
public double VotesStdDev { get; private set; }
}
  1. 在虚拟源中的过程摘要:

C#

cs 复制代码
[Command]
public void GetTotalSummaries(GetSummariesAsyncArgs args) {
args.Result = GetTotalSummariesAsync(args);
}
static async Task<object[]> GetTotalSummariesAsync(GetSummariesAsyncArgs args) {
var summaryValues = await IssuesService.GetSummariesAsync((IssueFilter)args.Filter);
return args.Summaries.Select(x => {
if (x.SummaryType == SummaryType.Count)
return (object)summaryValues.Count;
if (x.SummaryType == SummaryType.Max && x.PropertyName == "Created")
return summaryValues.LastCreated;

// Custom Summaries
if (x.SummaryType == SummaryType.Custom && x.PropertyName == "Votes") {
var tag = x.Tag as string;
if (tag == "Median")
return summaryValues.VotesMedian;
if (tag == "StdDev")
return summaryValues.VotesStdDev;
}
throw new InvalidOperationException();
}).ToArray();
}
  1. 在GridControl中显示摘要:

xml

XML 复制代码
<dxg:GridControl.TotalSummary>
<dxg:GridSummaryItem SummaryType="Count" Alignment="Right"/>
<dxg:GridSummaryItem SummaryType="Max" FieldName="Created"
DisplayFormat="{}Last created: {0}" Alignment="Right"/>
<!-- Custom Summaries -->
<dxg:GridSummaryItem SummaryType="Custom" Tag="StdDev" FieldName="Votes"
DisplayFormat="{}Votes StdDev={0}" Alignment="Right"/>
<dxg:GridSummaryItem SummaryType="Custom" Tag="Median" FieldName="Votes"
DisplayFormat="{}Votes Median={0}" Alignment="Right"/>
</dxg:GridControl.TotalSummary>
相关推荐
小羊没烦恼!11 小时前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
大蓝头12 小时前
安装包UI美化之路-nsNiuniuSkin全新UI调试与预览方法
ui·electron·安装包·截图控件·截屏控件
慧都小项15 小时前
当边缘AI上产线:QtitanDocking 如何让工业 HMI 实现多视图协同
人工智能·qt·ui·边缘计算·qt6.3
samble19 小时前
从零搭建灌装监控系统(四):深色主题与样式系统,ResourceDictionary 统一管理
c#·wpf·mvvm·样式·工业控制
_Jonas19 小时前
.net framework开发环境正式环境配置文件的切换
.net·wpf
兰亭妙微UI设计公司1 天前
兰亭妙微UI设计公司分享:EQUA 智能健康生态系统 UI/UX 设计深度解析
ui·交互
Cx330❀2 天前
Qt 常用控件属性与底层机制详解:从窗口半透明、浮点数陷阱到 QSS 与焦点策略
qt·ui·图形渲染
Cx330❀2 天前
Qt 常用 UI 控件详解:从QPushButton到QLabel 核心用法解析
qt·ui·图形渲染
Y3815326622 天前
C# 调用谷歌搜索 API:HttpClient 与 System.Text.Json 实战
搜索引擎·.net
传奇开心果编程2 天前
【ArkUI 练中学】第15课:UI 界面设计与实战
学习·ui·华为·harmonyos