界面控件DevExpress WPF Pivot Grid——拥有强大多维数据分析能力!
界面控件DevExpress WPF的Pivot Grid组件是一个类似excel的数据透视表,用于多维数据分析和跨选项卡报表生成。它拥有众多的布局自定义选项,允许开发者完全控制其UI且以用户为中心的功能使其易于部署。

PS:DevExpress WPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。
在本文中,将总结在DevExpress过去发布的几个周期中引入的与Pivot Grid相关的增强功能。
DevExpress WPF v22.2正式版下载(Q技术交流:674691612)
全新的统一绑定API
官方技术团队首要目标是交付单一/统一的绑定机制,并简化整个Pivot Grid设置。
Pivot Grid字段在以下模式下使用新的统一绑定机制:
OLAP
Server
内存中(启用了优化的数据处理引擎)
更新的API是建立在迄今为止最快的引擎上的(称之为优化计算引擎),因此统一的API允许开发者将Pivot Grid绑定到服务器模式/OLAP数据源或内存中数据源(新内存中引擎比旧的Legacy和LegacyOptimized引擎快得多)。
介绍完这些之后,现在一起看看每种可用的数据绑定类型……
DataSourceColumnBinding
使用DataSourceColumnBinding类将Pivot Grid字段绑定到数据源中的列或OLAP多维数据集中的度量/维度,在以前的版本中,开发者必须指定PivotGridFieldBase.FieldName属性来将PivotGrid字段绑定到数据源中的列。
PivotGridField statusField = new PivotGridField() {
FieldName = "[Measures].[Internet Revenue Status]",
Area = PivotArea.DataArea, AreaIndex = 2, Caption = "Status", Name = "fieldStatus" };PivotGridField quarterField = new PivotGridField() {
FieldName = "[Date].[Fiscal].[Fiscal Quarter]",
Area = PivotArea.RowArea, AreaIndex = 2, Caption = "Fiscal Quarter",
Name = "pivotGridField" };pivotGridControl.Fields.AddRange(new[] { quarterField, statusField });
开发者现在可以使用PivotGridField.DataBinding属性,它能够接收这种类型的实例,以及稍后将描述的其他实例。
PivotGridField statusField = new PivotGridField() { DataBinding =
new DataSourceColumnBinding("[Measures].[Internet Revenue Status]"),
Area = PivotArea.DataArea, AreaIndex = 2, Caption = "Status", Name = "fieldStatus" };PivotGridField quarterField = new PivotGridField() { DataBinding =
new DataSourceColumnBinding("[Date].[Fiscal].[Fiscal Quarter]"),
Area = PivotArea.RowArea, AreaIndex = 2, Caption = "Fiscal Quarter",
Name = "pivotGridField" };pivotGridControl.Fields.AddRange(new[] { quarterField, statusField });
ExpressionDataBinding和OlapExpressionBinding
ExpressionDataBinding和OlapExpressionBinding允许将Pivot Grid字段分别绑定到计算表达式或MDX表达式(OLAP),此外ExpressionDataBinding可以用来实现以下Pivot Grid特性:
自定义分组
自定义摘要
自定义排序
例如,以下来自字母分组示例应用程序的代码片段将ProductName字段值分组为三个范围:A-E, F-S和T-Z(基于产品名称的初始字符)。
// Create fieldProductName and bind it to the ProductName column in the data source.PivotGridField fieldProductName = new PivotGridField();
fieldProductName.Area = PivotArea.RowArea;
fieldProductName.Caption = "Product";
fieldProductName.DataBinding = new DataSourceColumnBinding("ProductName");
fieldProductName.Name = "fieldProductName";
pivotGridControl.Fields.Add("ProductName");// Create fieldProductGroup, specify the expression, and bind it to the created field.PivotGridField fieldProductGroup = new PivotGridField();
fieldProductGroup.Area = PivotArea.RowArea;
fieldProductGroup.Caption = "Product Group";
fieldProductGroup.AreaIndex = 0;
fieldProductGroup.DataBinding = new ExpressionDataBinding(
"iif(Substring([ProductName], 0, 1) < 'F', 'A-E',
Substring([ProductName], 0, 1) < 'T', 'F-S', 'T-Z')");
pivotGridControl.Fields.Add(fieldProductGroup);
这里的好处是,开发者不需要像在以前的版本中那样处理CustomGroupInterval事件:
pivotGridControl.CustomGroupInterval += (s, e) => {
if(!object.Equals(e.Field, fieldProductGroup)) return;
if(Convert.ToChar(e.Value.ToString()[0]) < 'F') {
e.GroupValue = "A-E";
return;
}
if(Convert.ToChar(e.Value.ToString()[0]) > 'E' &x;&x;
Convert.ToChar(e.Value.ToString()[0]) < 'T') {
e.GroupValue = "F-S";
return;
}
if(Convert.ToChar(e.Value.ToString()[0]) > 'S')
e.GroupValue = "T-Z";
};pivotGridControl.RefreshData();
注意:如果您使用更新的绑定API,以前涉及以下事件的分组\排序\汇总方法将不再支持:
CustomSummary
CustomUnboundFieldData
CustomGroupInterval
CustomFieldSort
新的CriteriaOperator函数
Binding API使用表达式进行自定义分组。开发者还可以计算自定义摘要,或对数据进行排序。
最新的版本中添加了更多的表达式函数来扩展支持使用场景的范围:
IsTotal(Dimension1, Dimension2, ...) — 确定是否计算汇总的总值,这个函数帮助以不同的方式计算不同的总值、总值或最后一级值。
FirstValue(Value) — 返回用于聚合值计算的行中的第一个值。
WindowFirstValue(SummaryExpression, StartOffset, EndOffset) — 返回窗口内表达式的第一个值。
自定义聚合
新版本还添加了在Expression Editor中创建和注册自定义聚合函数的功能,注册的函数可以与预定义的Pivot Grid方法一起使用。
支持OLAP ADOMD. NET NuGet包
Pivot Grid现在支持OLAP ADOMD.NET NuGet包用于.NET Framework和.NET. With ADOMD.NET,开发者可以读取多维模式(超过两个轴),在多维数据集上发起查询,并根据需要检索结果。
异步模式
更新的版本增强了Pivot Grid的异步模式,使其更加可用和稳定。
Pivot Grid现在可以同时调用多个异步操作。
链接到过滤UI上下文的Pivot Grid现在以异步模式工作。
异步模式API方法现在返回Task<>对象,这简化了await关键字的用法语法。
下面的代码片段来自OLAP Drill Down 技术演示,为选定的Pivot Grid单元格创建了一个下钻数据源,并以异步模式在DrillDownForm对话框中显示结果数据源。
pivotGridControl.CellDoubleClick += async (s, e) => {
try {
pivotGridControl.LoadingPanelVisible = true;
PivotDrillDownDataSource ds = await e.CreateDrillDownDataSourceAsync();
pivotGridControl.LoadingPanelVisible = false;
using(DrillDownForm form = new DrillDownForm(ds))
form.ShowDialog();
} catch(Exception ex) {
pivotGridControl.LoadingPanelVisible = false;
XtraMessageBox.Show(ex.Message);
}
};
相关文章:

界面控件DevExpress WPF Pivot Grid——拥有强大多维数据分析能力!
界面控件DevExpress WPF的Pivot Grid组件是一个类似excel的数据透视表,用于多维数据分析和跨选项卡报表生成。它拥有众多的布局自定义选项,允许开发者完全控制其UI且以用户为中心的功能使其易于部署。PS:DevExpress WPF拥有120个控件和库&…...
python字典及基础操作
1) 字典是没有顺序的,是任意对象的无序集合。 2) 字典的键是唯一的,不能多次出现,多次出现时取最后一个值。 3) 键是不可变的。 4) 字典中的元素可增删。 5) 因为没有顺序,所以不存在索引。 1. 字典元素的访问 >>> …...

Windows Server 2008 R2安装onlyoffice【docker】
目录 前言 准备工作 安装docker 安装onlyoffice 常见问题 前言 目前docker for windows只能在windows10/11上安装,其他的windows版本只能使用Docker Toolbox来安装,使用该工具安装的docker其实是借助了Oracle VM VirtualBox虚拟机来运行的&a…...

JVM学习笔记六:运行时数据区之堆
目录 概述 堆空间内部结构 JDK7版本 JDK8版本 堆空间的内存划分 堆空间大小设置参数 概述 Java堆是虚拟机所管理的内存中最大的一块,其在JVM启动时即被创建,并且空间大小也被确定(这里是不考虑Java8之后以本地内存来实现的元空间&…...

usb闪存驱动器数据恢复该怎么进行?3个方法总结
“怎么办?我的USB驱动器不知道因为什么原因,里面的数据、文件都消失了。有没有什么方法在没有进行备份的情况下恢复从U盘丢失的数据?” USB驱动器作为最常用的存储移动设备,里面保存着各种文件数据。但是有时会出现损坏而导致数据…...

DAX 微信 markdown 编辑器
DAX 微信 markdown 编辑器 一、致谢 感谢开源项目: md wechat-format 感谢 WordPress 插件 Mine云点播 作者 mine27 的指导。 二、如何使用 打开如下地址,直接编辑,可以实时看到符合微信公众号排版的效果。 推荐访问:https://j…...
湖南中创教育为学员提供方便快速的退费服务
2006年,湖南中创教育科技有限公司创始人团队开始创业进入职业教育行业;2014年公司正式成立,组建专业团队并转型升级“互联网”,进入在线教育行业。 自主研发“中创网校”学习平台,为学员提供了集直播、视频回放复习、…...

Java 给视频添加背景音乐 | Java工具
目录 前言 Maven依赖 环境依赖 代码 总结 前言 本文提供给视频添加背景音乐的java工具,一如既往的实用主义。 Maven依赖 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.1.1…...

【JUC2022】第二章 多线程锁
【JUC2022】第二章 多线程锁 文章目录【JUC2022】第二章 多线程锁一、乐观锁与悲观锁1.悲观锁2.乐观锁二、八锁案例1.标准情况,有a、b两个线程,请问先打印邮件还是短信【结果:邮件】2.sendEmail方法中加入暂停3秒钟,请问先打印邮件…...

快学会这个技能-.NET API拦截技法
大家好,我是沙漠尽头的狼。 本文先抛出以下问题,请在文中寻找答案,可在评论区回答: 什么是API拦截?一个方法被很多地方调用,怎么在不修改这个方法源码情况下,记录这个方法调用的前后时间&…...

stm32f407探索者开发板(十八)——串口通信实验讲解(USART_RX_STA流程图详解)
文章目录一、uart_init(串口初始化)二、USART1_IRQHandler(串口1中断服务程序)三、main.c(主函数)四、关于printf的支持一、uart_init(串口初始化) 就是根据上一篇的一样的步骤&…...
Hystrix资源隔离
目录资源隔离使用资源隔离的好处基于Hystrix实现微服务中资源隔离基于Hystrix线程池隔离实现资源隔离利用 HystrixCommand 获取单条数据利用 HystrixObservableCommand 批量获取数据基于 Hystrix 信号量机制实现资源隔离资源隔离 资源隔离是什么? 资源隔离是指把对…...

字符串(一)-- LeetCode[3] 无重复字符的最长子串
1 无重复字符的最长子串 1.1 题目描述 给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s “bbbbb” 输出: 1 解释…...

Qt中修改界面类的类名时需要注意的几个修改点
有些时候因为一些原因,需要修改Qt中创建的界面类,需要特别注意几个修改点。 比如将test类修改为test2类 修改test.h名称为test2.h文件;修改test.cpp名称为test2.cpp文件;修改test.ui名称为test2.ui文件;修改pro文件中…...

【Spring6】| Spring启示录、Spring概述
目录 一:Spring启示录 1. OCP开闭原则 2. 依赖倒置原则DIP 3. 控制反转IoC 二:Spring概述 1. Spring简介 2. Spring8大模块 3. Spring特点 一:Spring启示录 引言:前面我们已经学习了三层架构:表示层、业务层、…...

react源码中的fiber架构
先看一下FiberNode在源码中的样子 FiberNode // packages/react-reconciler/src/ReactFiber.old.js function FiberNode(tag: WorkTag, pendingProps: mixed, key: null | string, mode: TypeOfMode, ) {// Instancethis.tag tag;this.key key;this.elementType null;t…...

C++类和对象-继承多态
继承 继承是面向对象三大特性之一 定义类时,下级别的成员除了拥有上一级的共性,还有自己的特性,就可以考虑使用继承的技术,减少代码的重复 继承的基本语法 语法:class 子类 : 继承方式 父类 子类也被成为派生类父类…...

appium自动化测试
获取应用包名和入口activity:aapt命令 aapt目录: 安卓sdk的build-tools目录下(如果要在cmd里直接运行,要配置环境变量,否则需要在aapt所在目录下打开cmd) 示例: adt-bundle-windows-x86_64-20140702\sdk\build-too…...

打印流、转换流、数据流 、随机访问流
Java知识点总结:想看的可以从这里进入 目录5、打印流6、转换流7、数据流8、随机访问流5、打印流 实现将基本数据类型的数据格式转化为字符串输出,它们提供了一系列重载的print()和println()方法,用于多种数据类型的输出,这种流不会…...
Java的4种访问权限?
1、public: 所修饰的类、变量、方法,在内外包均具有访问权限;2、protected: 这种权限是为继承而设计的,protected所修饰的成员,对所有子类是可访问的,但只对同包的类是可访问的,对外…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...

【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践,很多人以为AI已经强大到不需要程序员了,其实不是,AI更加需要程序员,普通人…...

安宝特案例丨寻医不再长途跋涉?Vuzix再次以AR技术智能驱动远程医疗
加拿大领先科技公司TeleVU基于Vuzix智能眼镜打造远程医疗生态系统,彻底革新患者护理模式。 安宝特合作伙伴TeleVU成立30余年,沉淀医疗技术、计算机科学与人工智能经验,聚焦医疗保健领域,提供AR、AI、IoT解决方案。 该方案使医疗…...
Vuex:Vue.js 应用程序的状态管理模式
什么是Vuex? Vuex 是专门为 Vue.js 应用程序开发的状态管理模式 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 在大型单页应用中,当多个组件共享状态时,简单的单向数据流…...
Linux--vsFTP配置篇
一、vsFTP 简介 vsftpd(Very Secure FTP Daemon)是 Linux 下常用的 FTP 服务程序,具有安全性高、效率高和稳定性好等特点。支持匿名访问、本地用户登录、虚拟用户等多种认证方式,并可灵活控制权限。 二、安装与启动 1. 检查是否已…...

【Linux应用】Linux系统日志上报服务,以及thttpd的配置、发送函数
【Linux应用】Linux系统日志上报服务,以及thttpd的配置、发送函数 文章目录 thttpd服务安装thttpd配置thttpd服务thttpd函数日志效果和文件附录:开发板快速上手:镜像烧录、串口shell、外设挂载、WiFi配置、SSH连接、文件交互(RADX…...