索引

.【水晶报表内功心法】--序言
.【水晶报表内功心法】--推拉之间
.【水晶报表内功心法】--PULL模式样板招式
.【水晶报表内功心法】--PUSH模式样板招式
.【水晶报表内功心法】--信手拈来,掌控对象
.【水晶报表内功心法】--数据过滤
.【水晶报表内容心法】--第一阶段小结
...
...
.【水晶报表内功心法】--完美Excel(上)
.【水晶报表内功心法】--完美Excel(下)
============================================================

一如既往地忙碌,一如既往地加班。
这个月马上就要过去了,回头一望,本月最令人激动的事情就是去了美女如云的 ChinaJoy。
附照片一张。
[20100323:美女图片不幸丢失。。]

本文的主题是:函数与公式、运行时总计
本文还是以基础讲解为主,后面的一些实际场景中会有具体的使用

1:公式
公式可以说是水晶报表里精髓,其重要性有点像Excel的宏一样。
公式基本上可以分为两类,一是格式化类。一是运算类。当然,格式化的公式也是需要运算的。
水晶报表的一些内置的功能,本身也是依赖于公式的,只是做了封装。
公式有两种语法:crystal语法和Basic语法,没有根本性差异。
如果你之前用过Basic类的语言,那么这个就非常容易了。
可以从此处下载一个独立版本的水晶报表帮助文档,方便查阅。
《CR XI水晶报表开发官方中文帮助文档》

格式化类主要出现在如下位置:
比如,我们要把某个列中值等于12的值设置为蓝色,等于15的设置为红色,其余的设置为黑色。
在字段上点右键,格式化该字段,

这个图上的(x+2)后面就是一个公式,如果里面没有内容,这个图标就是这种默认的颜色。
如果里面有内容,则图标会变成红色。

本文的示例数据延续前文中的例子

实例1,如果用户分数等于12,则显示为蓝色,如果等于15分则显示为蓝色,其他显示为黑色。
点击上图中的(x+2),进入公式编辑界面。

我抓了个大图,里面做了一些标记。
公式本身就比较简单了,不必再进行说明。
注意前面的图上左上角的两个指向,x+2是指检查该公式是否正确,检查完毕后停留在当前界面
保存并关闭,则是先检查后保存公式并且关闭本界面,回到前一界面上。

好了,我们再运行一下程序,效果就出来了。

实例2,控制每3条记录换页

进入节专家


点中“详细资料节”,勾选后面的“在后面新建页”,然后编辑后面的公式为

如果公式有错误,则会有类似下面的提示,当然,根据错误的不同,提示也不一样

再预览一下,之前我们显示1页的数据,已经分页了。注意上面的 1+,说明页数多于一页。

但是并没有显示实际页数,这是水晶报表的一个优化机制。如果是多页的数据,它只显示第一页
有点类似于我们的一些数据库分页操作一样。但是这个也带来很多批评。
而实际上,解决方法也是有的。
就是这样

C# code
CrystalReportViewer1.ReportSource = myReport; CrystalReportViewer1.ShowLastPage(); CrystalReportViewer1.ShowFirstPage();

实际上也是模拟了我们的一个手工动作,就是先点击跳到最后一页,然后再切到第一页。
这个动作用户是感觉不到的,尚可以接受。

前面的是两个格式化类的公式,下面说一下运算类公式。

实例3,如果分数<15则显示不合格,等于15则为合格,大于15则为优秀
这个就是对数据的再加工了。

新建一个公式字段x1

然后把x1拖到界面上,放到原来数据的后面,预览后就显示

实例4,代码中修改公式
新建一个公式字段x2,里面就放一个现有字段即可

显示效果如下

恩,没什么感觉吧。
另外做一个公式字段x2title,作为x2这一列的题头


然后代码里控制一下:

C# code
myReport.DataDefinition.FormulaFields["x2"].Text = "{RPT_CR_TEST1.Scores}"; myReport.DataDefinition.FormulaFields["x2title"].Text = "'得分情况'";

特别注意的是,原公式中返回的是字符串的话,要把引号带进去。
myReport.DataDefinition.FormulaFields["x2title"].Text = "'得分情况'";

再看效果

这个可以实时变化的字段,有很多用处的。
用过的朋友应该记得,在分组、图表、交叉表的时候,都可以使用公式字段作为运算字段的
如果我们在代码中控制公式里的字段变化,那么自然也达到了动态分组、动态图表等效果了
类似的应用可以参考:
《在水晶报表中实现任意选择指定字段显示-模板及C#升级版》 
《用公式实现动态设置图表的轴数据项 》

这个是单一公式,公式之间可以嵌套使用,有时候也可以结合全局变量进行多公式协作
这些在后面的一些实际应用场景中会讲到。

2:运行时总计

我们知道报表里内置了求和和计数等汇总功能,但是如何只求部分数据的和呢?

实例5:
求大于15分的所有分数的和,求大于15分的人的个数,并求得平均值

新建一个运行时总计字段Rtotal0,这个用于获取分数和

注意在“求值”的位置,编辑后面的公式:

新建一个运行时总计字段Rtotal1,这个用于获取人数

注意这个求值也是用了公式的,所以(x+2)是红色的,公式的内容跟Rtotal0一样。
因为都是同样的规则。

新建一个公式字段x3,

C# code
//定义一个字符串变量 stringvar s1; //定在一个数值型变量 numbervar n1; s1 := '得分大于15分的所有人的平均得分为'; //对于If Else逻辑来说,每个分支逻辑返回的数据类型,都应该是一样的 //进行一个保护,防止分母为0 if {#RTotal1}=0 then s1+'-' else //一个分支逻辑有多条语句,可以用括号括起来,这样更加清晰 ( //计算平均值 n1 := {#RTotal0}/{#RTotal1}; s1+cstr(n1,2); )

这个公式是个小典型,里面用到了变量。
实质上跟我们在程序里用的变量差别不大。
因为考虑到求平均值时可能出现分母为0的情况,所以进行了一个保护。
注意公式的默认语法是Crystal语法,其赋值方式为 x:=5,x=5 则是一个逻辑判断
(有时候又可以混用,不过最好按照规则走)

看一下实际的运行效果

运行时总计,就是数据从上往下显示时的一种数据处理,
他的数据只能从上往下走,按照一定的规则处理其中的一些数据。
它一定要出现在数据的下面(或与数据平行),而不能与其他Max,Sum等聚合函数一样可以出现在数据之前。
实质上,运行时总计,本身就是公式的一种特殊应用。

3:函数

函数其实也是基于公式的,跟我们普通程序一样。如果有很多重复的公式,那么可以提炼成函数进行复用。
我们就以前面的公式x1进行改造。
模板上不能直接进入函数编辑界面,先要进入公式编辑界面。
新建一个函数,setTitle


先使用编辑器,
直接把现在的公式拷贝进去,注释一份做参考,实际一份做改造
点击保存的时候,有报错。函数中是不能直接使用字段的。

我们做一个变量x来接后面可能的输入值,可能是字段,也可能是其他

然后我们把公式x1改掉

还是可以实现同样的效果。

前面的界面上我们看到另外一个“使用提取器”的按钮。
我们也来用一下
新建一个函数setTitle2,点击使用提取器按钮


这个就是从现有的公式中提炼成函数的,很方便吧,呵呵。
我们选中x1(为了方便演示,我把函数删掉,恢复到原来的公式内容),这时候工具会自动把数据库字段设置为参数。
点击确定后,函数就建好了,可以再进行适当编辑

其他:

公式可以通过与参数的结合,实现更复杂的效果。
函数是基于公式的,公式是可以直接调用函数。
函数间可以互相调用。
函数中不能使用报表参数字段(parameterField),不能使用数据库字段
公式和运行时总计中则都可以使用。

本文中的公式相对比较基础一些,后面开始进入更复杂的阶段。
主要是分组、图表、子报表及交叉表,这些部分的处理方法与之前稍有不同
基础应用之外,还会结合一些实际场景,并且会综合之前讲解的一些内容,做一些深入。

【水晶报表内功心法】--公式、函数与运行时总计 注:(文章来自阿泰博客)相关推荐

  1. 【水晶报表内功心法】--PUSH模式样板招式

    索引 .[水晶报表内功心法]--序言 .[水晶报表内功心法]--推拉之间 .[水晶报表内功心法]--PULL模式样板招式 ======================================= ...

  2. 【水晶报表内功心法】--完美Excel(下)

    前文<[水晶报表内功心法]--完美Excel(上)>中, 主要讲解了如何做一个基础的到处样式, 本文在上文的基础上,实现类Excel的一个操作,就是单元格横向和纵向合并.以及加底色的效果, ...

  3. C语言dlopen()和dlsym()获取函数的运行时地址

    在C语言中,可以使用库函数dlopen()和dlsym()来获取函数的运行时地址.dlopen()函数用于打开共享库,dlsym()函数用于查找共享库中的符号(函数名),并返回其地址. 下面是一个示例 ...

  4. 利用apache+wsgi运行你的django网站 - Open Idea - 博客大巴

    利用apache+wsgi运行你的django网站 - Open Idea - 博客大巴 利用apache+wsgi运行你的django网站 - Open Idea - 博客大巴 利用apache+w ...

  5. 【水晶报表内功心法】--完美Excel(上)

    本来这一篇要放到很后面去写,不过论坛里有人问到,就提前了. 很多人说水晶报表导出的Excel太难看,或者导出的Excel根本没法用,其实水晶报表是可以完整导出到Excel的 当然,水晶报表与其他基于C ...

  6. C++工作笔记- C++中的动态类型与动态绑定、虚函数、运行时多态的实现

    动态类型与静态类型 静态类型 是指不需要考虑表达式的执行期语义,仅分析程序文本而决定的表达式类型.静态类型仅依赖于包含表达式的程序文本的形式,而在程序运行时不会改变.通俗的讲,就是上下文无关,在编译时 ...

  7. github项目怎么运行_利用 GitHub 从零开始搭建一个博客

    "NightTeam",一个值得加星标的公众号. 趁着周末,搭建了一下 NightTeam 的官方博客和官方主页,耗时数个小时,两个站点终于完工了. 由于 NightTeam 的域 ...

  8. 水晶报表位置公式_高频、实用函数公式,提升您的工作效率!

    在职场办公中,我们经常要整理各种表格.报表,对其进行各种分析处理.如果我们能够熟练掌握一些函数公式,那么,在处理数据时就更加得心应手,更加高效的完成任务. 分析云中,整理了7大类.50多个函数公式,点 ...

  9. 水晶报表——小代码,大作用(转自CSDN,阿泰)

    在前面的文章中,我一直是用WebForm演示的,主要是因为 HTTP是无状态的,在此链接的操作,不会带到下一连接中. 所以我们经常会遇到这样的情况,当前显示好的,在翻页.导出.打印等动作的时候,出出现 ...

  10. [转载]R软件包vegan教程 5.1 函数adonis的使用_圈圈Bio_新浪博客

    原文地址:R软件包vegan教程 5.1 函数adonis的使用作者:mateco 5 差异和环境(Dissimilarities and environment) 已经讨论了排序的环境因子解释,和环 ...

最新文章

  1. 高考623分却说自己是“反面教材”?外卖小哥最新发声!
  2. HIVE-ORC表一些知识点
  3. linux c 判断字符串是否是数字
  4. vs2013 openmp例子
  5. centos8共享文件夹挂载_MacOS自动挂载nfs服务器共享目录
  6. Java遍历指定文件夹,在屏幕打印所有以abc结尾的文件
  7. Session.run() Tensor.eval()
  8. JDK1.8中如何用ScriptEngine动态执行JS
  9. 前端学习(225):尺寸属性
  10. Python break/continue - Python零基础入门教程
  11. 86-Spark2.2源码:RDD中WithScope是什么?
  12. python是什么课程-教你python中什么是集合(一)
  13. 【基础软硬件】IEEE 754规定的浮点数规则与发送与接收float数据的代码示例
  14. c++ 开源pdf文件阅读器
  15. 数学建模-线性优化模型
  16. c语言sum求和程序,C语言实现的统计素数并求和代码分享
  17. Java IO流详解和常用流的使用
  18. win xp故障恢复控制台应用实例
  19. Unix和Linux
  20. 学习webAP第七天

热门文章

  1. 5G.gNB——eNB的变身
  2. 掌上飞车-艳云脚本云控系统
  3. vios 虚拟光驱 安装vioc
  4. 财务上的大写数字从1到10分别是?
  5. 【基于狂神Docker双响曲】:2、Docker进阶
  6. heka study
  7. ssh:connect to host localhost port 22: Connection refused解决方法
  8. 进阶篇:3.4)机械加工件设计
  9. 【人工智能】2.博弈问题、博弈搜索策略
  10. php 字符串编码方式转换,php字符串编码转换的常用几种方法_PHP教程