PivotGridControl控件应用
一、概述
PivotGridControl是DevExpress组件中的一个重要控件,在数据多维分析方面具有强大的功能,它不仅可以分析数据库中的数据,而且还能够做联机分析处理(OLAP),并且支持多种数据仓库。前面的文章中介绍了如何用PivotGridControl制作交叉表部件,在智能窗体上展示交叉报表。本文将继续对PivotGridControl控件的应用技巧进行小结。< xmlnamespace prefix ="o" />
二、功能特点
首先通过界面了解PivotGridControl控件的基本概念,下图是PivotGridControl控件显示的一个交叉表样例:
图1:交叉表界面
区域1、2分别是交叉表的行、列区域,包含行列字段值,及字段标题。通过标题按钮可以对字段值进行排序、本地过滤等操作。
区域3、4是数据区域,其中白色的单元格是“汇总单元格”,它显示对数据源的汇总值。黄色单元格为“小计、总计”单元格,进一步统计汇总单元格的值。
区域5是显示过滤字段的数据筛选区域,过滤字段不属于交叉表的一部分,专门用于对数据进行本地过滤。
从这个交叉表可以了解到PivotGridControl控件具有以下特点:
1) 可定制的报表
终端用户能够定制PivotGridControl的字段。在字段标题上点击右键弹出字段列表框,通过鼠标拖拽增加或减少行、列、数据区域的字段,改变交叉报表的分析方式。
图2:字段定制
2) 树形结构的字段值
图1的行区域有“部门、姓名”2个字段,部门是姓名的上级字段,在部门的字段值上显示了“展开/折叠按钮”。例如图3折叠字段值“儿科”后,数据区域的单元格将以“儿科”小计行的方式显示。
如果有2个以上的行(列)字段,除了最后一级,其它字段值都可以像树形节点一样展开/折叠。
图3:树形字段值
3) 本地过滤
界面上显示的字段标题具有本地过滤的功能。点击字段标题上的过滤按钮,可以弹出字段值列表。筛选字段值后,交叉表以此为条件过滤数据源中的数据后再进行汇总。当行、列字段值较多时,终端用户通过本地过滤减少行列数,只统计出当前关注的数据。
图4:本地过滤
4) 数据钻取
通过钻取单元格可以得到单元格汇总的原始记录,参见下图:
图5:数据钻取
代码示例:
在PivotGridControl单元格双击事件中,调用了对象的CreateDrillDownDataSource 方法,得到单元格值的详细记录。数据钻取是深入分析数据的必备功能。
三、字段控件属性
字段控件(PivotGridField)是PivotGridControl中的基本组成元素,以上功能就是控制其字段属性得以实现的。
属性名称 |
意义 |
PivotGridField.Area |
该属性表示字段当前所在的区域,有{行区域、列区域、数据区域、数据过滤区域}4个单选值。拖拽字段位置后,属性值也会实时变化。 |
PivotGridField.AllowedArea |
控制字段只能在指定区域中拖动,有{行区域、列区域、数据区域、数据过滤区域}4个多选项。该属性值应包含“Area”的属性值。 |
PivotGridField.AreaIndex |
表示字段在同一个区域的排列顺序,可以在界面上拖拽动态设置。 |
PivotGridField.Visible |
字段是否可见,不可见的字段可以放到字段列表框备用。 |
PivotGridField.Option.AllowExpand |
字段在行列区域时,字段值是否显示展开、折叠按钮。 |
PivotGridField.Option.AllowFilter |
字段标题上是否显示本地过滤按钮 |
PivotGridField.SummaryType |
字段的汇总类型:求和、平均值、最大值、最小值、计数。 |
PivotGridField.FieldName |
绑定的业务数据表字段名称 |
PivotGridField.FieldEdit |
嵌入单元格的编辑控件,用此控件实现交叉表的数据编辑功能。 |
PivotGridField.Width |
通过设置字段标题宽度控制交叉表行、列的宽度。但字段在列区域时,此属性是无效的,因为列宽是由单元格宽度决定的,而单元格宽度等于数据字段标题宽度。并且从属于同一个数据字段的所有列宽只能统一设置,无法单独设置每一列的宽度。 |
除了以上比较重要的属性,还有排序、图标、外观等属性。
四、应用分析
1. 数据编辑
交叉表除了展示数据分析结果,也可以用于编辑数据。以前的文章介绍了交叉表编辑的应用场景及限制条件,重点是单元格要能够唯一映射到数据源的原始记录。
和网格部件类似,单元格的编辑功能都是通过“Embed Editor”实现的,因此可以和网格部件使用相同的字段模型。
但是和网格部件的区别在于,编辑单元格的值后,PivotGridControl是不会自动把单元格输入的值更新到数据源的。从图5的数据钻取结果可知,单元格可能对应多条原始记录。那么PivotGridControl控件本身就无法决定应该如何更新这些原始记录,这就需要开发者根据实际的业务需求去手动更新数据源的记录。所以根据目前的应用场景,规定单元格数据钻取结果超过1条记录时就不允许编辑。
2. 显示多行文本
前面涉及的交叉表例子都是以数字类型的字段作为数据字段。实际上文本类型的字段也可能作为数据字段(参见图6)。这种交叉表不是为了对文本字段进行统计分析,而是以二维的表结构显示,使其易于阅读。
图6
但是PivotGridControl对多行文本的支持并不理想。虽然可以用多行文本的“Embed Editor”把字段值显示出来,但显示出来的结果却只有一行字符的高度。从字段属性表可知,字段控件也只能设置其宽度,而没有设置高度的功能,更不用说像Excel那样自适应每行高度了。
经过一番搜寻,发现PivotGridControl V11.1中有虚方法“RaiseCustomRowHeignt()”。
该方法的第一个输入参数表示行区域中将要设置行高的那个单元格,第二个参数为行高。重写此虚方法即可改写默认行高。
RaiseCustomRowHeignt 是单独设置每行高度的,在列宽固定的条件下,只要计算出每行单元格的最长内容,就可以得到每行的最佳高度。
测量字符串显示尺寸的示例代码:
使用GDI+的 MeasureString 方法可以测得字符串在指定字体时的显示尺寸 sizeF。
MeasureString 的第3个参数是可选的,设置一个固定宽度,那么测得的结果就是在考虑自动换行情况下的显示尺寸。
效果图预览:
图7:多行文本
3. 隐藏字段的2种方法
在字段属性中有“Visible”控制字段是否显示,除此之外还可以把字段宽度设为0,实现字段的隐藏。
图8
参见示例“图8”,有“日期”行字段。下面分别用2种方式隐藏该字段
方法一:把“日期”字段控件的属性设为fale,结果见图9,交叉表的分析字段只包含了“开单人、收费项目”。“日期”字段已经不在交叉表的行区域中了。
图9
方法二:把“日期”字段控件的宽度“Width”属性设为0,结果如下:
图10
与图8比较可知,交叉表的分析结果与隐藏“日期”字段之前相同。
所以零宽度字段不但可以实现行字段的隐藏,同时还能够保持交叉表的分析方式不变。用零宽度字段可以实现一些特殊结构的交叉表。
PivotGridControl还有很多有用的功能,目前我们只是用到了其中的一部分,以后有需要再深入学习。
PivotGridControl控件应用的更多相关文章
- DevExpress Winform 通用控件打印方法(允许可自定义边距) z
DevExpress Winform 通用控件打印方法,包括gridcontrol,treelist,pivotGridControl,ChartControl,LayoutControl...(所有 ...
- JS调用Android、Ios原生控件
在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...
- HTML5 progress和meter控件
在HTML5中,新增了progress和meter控件.progress控件为进度条控件,可表示任务的进度,如Windows系统中软件的安装.文件的复制等场景的进度.meter控件为计量条控件,表示某 ...
- 百度 flash html5自切换 多文件异步上传控件webuploader基本用法
双核浏览器下在chrome内核中使用uploadify总有302问题,也不知道如何修复,之所以喜欢360浏览器是因为帮客户控制渲染内核: 若页面需默认用极速核,增加标签:<meta name=& ...
- JS与APP原生控件交互
"热更新"."热部署"相信对于混合式开发的童鞋一定不陌生,那么APP怎么避免每次升级都要在APP应用商店发布呢?这里就用到了混合式开发的概念,对于电商网站尤其显 ...
- UWP开发必备:常用数据列表控件汇总比较
今天是想通过实例将UWP开发常用的数据列表做汇总比较,作为以后项目开发参考.UWP开发必备知识点总结请参照[UWP开发必备以及常用知识点总结]. 本次主要讨论以下控件: GridView:用于显示数据 ...
- 【踩坑速记】开源日历控件,顺便全面解析开源库打包发布到Bintray/Jcenter全过程(新),让开源更简单~
一.写在前面 自使用android studio开始,就被它独特的依赖方式:compile 'com.android.support:appcompat-v7:25.0.1'所深深吸引,自从有了它,麻 ...
- 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)
前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...
- Windows API 设置窗口下控件Enable属性
参考页面: http://www.yuanjiaocheng.net/webapi/create-crud-api-1-put.html http://www.yuanjiaocheng.net/we ...
随机推荐
- Hadoop基础-HDFS数据清理过程之校验过程代码分析
Hadoop基础-HDFS数据清理过程之校验过程代码分析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 想称为一名高级大数据开发工程师,不但需要了解hadoop内部的运行机制,还需 ...
- IDEA Mybatis plugin插件破解
破解文件: 链接:https://pan.baidu.com/s/1J7asfLc5I0RBcoYX3_yNvQ 提取码:kjxv 使用方法: C:\Users\{你的用户名}\.IntelliJId ...
- javascript精雕细琢(三):作用域与作用域链
目录 引言 1.执行环境 2.作用域与作用域链 引言 作用域与作用域链是JS应用中无时无刻不在影响程序运行的关键属性,但是由于它的不可见性,或者说它存在的过于普遍,简直就像空气一样.所以 ...
- Django 2.0.1 官方文档翻译: 文档目录 (Page 1)
Django documentation contents 翻译完成后会做标记. 文档按照官方提供的内容一页一页的进行翻译,有些内容涉及到其他节的内容,会慢慢补上.所有的翻译内容按自己的理解来写,尽量 ...
- TensorFlow在windows10上的安装与使用(一)
随着近两年tensorflow越来越火,在一台新win10系统上装tensorflow并记录安装过程.华硕最近的 Geforce 940mx的机子. TensorFlow是一个采用数据流图(data ...
- 【leetcode 简单】 第一百一十一题 可怜的小猪
有1000只水桶,其中有且只有一桶装的含有毒药,其余装的都是水.它们从外观看起来都一样.如果小猪喝了毒药,它会在15分钟内死去. 问题来了,如果需要你在一小时内,弄清楚哪只水桶含有毒药,你最少需要多少 ...
- Python概念-禁锢术之__slots__
之所以给它起名为禁锢术,并非空缺来风,下面我们来了解一下__slost__ __slost__:其实就是将类中的名称锁定,实例化对象,只可以赋值和调用,不可以删除名字和增加新的名字 代码示例:(实例化 ...
- javaScript书写规范
命名规范. 常量名 全部大写并单词间用下划线分隔 如:CSS_BTN_CLOSE.TXT_LOADING对象的属性或方法名 小驼峰式(little camel-case) 如: ...
- 再战CS231-快速排序
1.用python实现快速排序 print quicksort([3,6,8,10,1,2,1]) # Prints "[1, 1, 2, 3, 6, 8, 10]" ''' @a ...
- MySQL服务器修改主机名后问题解决
1.单机MySQL主机名修改 今天无事看到自己的主机名不对,于是改了一下,以便区分服务器,那只重启MySQL时出现下面错误: MySQL manager or server PID file coul ...