【水晶报表内功心法】--公式、函数与运行时总计
索引
.【水晶报表内功心法】--序言
.【水晶报表内功心法】--推拉之间
.【水晶报表内功心法】--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+,说明页数多于一页。
但是并没有显示实际页数,这是水晶报表的一个优化机制。如果是多页的数据,它只显示第一页
有点类似于我们的一些数据库分页操作一样。但是这个也带来很多批评。
而实际上,解决方法也是有的。
就是这样
CrystalReportViewer1.ReportSource = myReport;CrystalReportViewer1.ShowLastPage();CrystalReportViewer1.ShowFirstPage();
myReport.DataDefinition.FormulaFields["x2"].Text = "{RPT_CR_TEST1.Scores}";myReport.DataDefinition.FormulaFields["x2title"].Text = "'得分情况'";//定义一个字符串变量stringvar s1;//定在一个数值型变量numbervar n1;s1 := '得分大于15分的所有人的平均得分为';//对于If Else逻辑来说,每个分支逻辑返回的数据类型,都应该是一样的//进行一个保护,防止分母为0if {#RTotal1}=0 thens1+'-'else//一个分支逻辑有多条语句,可以用括号括起来,这样更加清晰(//计算平均值n1 := {#RTotal0}/{#RTotal1};s1+cstr(n1,2);)
看一下实际的运行效果
运行时总计,就是数据从上往下显示时的一种数据处理,
他的数据只能从上往下走,按照一定的规则处理其中的一些数据。
它一定要出现在数据的下面(或与数据平行),而不能与其他Max,Sum等聚合函数一样可以出现在数据之前。
实质上,运行时总计,本身就是公式的一种特殊应用。
3:函数
函数其实也是基于公式的,跟我们普通程序一样。如果有很多重复的公式,那么可以提炼成函数进行复用。
我们就以前面的公式x1进行改造。
模板上不能直接进入函数编辑界面,先要进入公式编辑界面。
新建一个函数,setTitle
先使用编辑器,
直接把现在的公式拷贝进去,注释一份做参考,实际一份做改造
点击保存的时候,有报错。函数中是不能直接使用字段的。
我们做一个变量x来接后面可能的输入值,可能是字段,也可能是其他
然后我们把公式x1改掉
还是可以实现同样的效果。
前面的界面上我们看到另外一个“使用提取器”的按钮。
我们也来用一下
新建一个函数setTitle2,点击使用提取器按钮
这个就是从现有的公式中提炼成函数的,很方便吧,呵呵。
我们选中x1(为了方便演示,我把函数删掉,恢复到原来的公式内容),这时候工具会自动把数据库字段设置为参数。
点击确定后,函数就建好了,可以再进行适当编辑
其他:
公式可以通过与参数的结合,实现更复杂的效果。
函数是基于公式的,公式是可以直接调用函数。
函数间可以互相调用。
函数中不能使用报表参数字段(parameterField),不能使用数据库字段
公式和运行时总计中则都可以使用。
本文中的公式相对比较基础一些,后面开始进入更复杂的阶段。
主要是分组、图表、子报表及交叉表,这些部分的处理方法与之前稍有不同
基础应用之外,还会结合一些实际场景,并且会综合之前讲解的一些内容,做一些深入。
预告:分组及多场景应用
[解决办法]
sf
[解决办法]
不错,很好很强大
[解决办法]
[解决办法]
jf
[解决办法]
丁贝莉也去了咯
支持一下.
[解决办法]
[解决办法]
谢谢诶,分享!
[解决办法]
很好很强大。。。
有美女+代码
[解决办法]
学习一下,看得不是很懂!
[解决办法]
wo
[解决办法]
学习 啊
[解决办法]
不错,支持一下
[解决办法]
好东西啊
[解决办法]
太棒了。做个记录。
感谢大大分享。
[解决办法]
哎呀,不加照片还好....加了就...嘿嘿。
[解决办法]
ding
[解决办法]
顶了
[解决办法]
泰哥!你不该发那张美女图啊!
害得我完全没有兴趣看你后面写的那些技术内容了……
[解决办法]
jf
[解决办法]
好呀……
[解决办法]
一般般
[解决办法]
持续关注中。。。谢谢阿泰!
[解决办法]
收藏了,很好,很值得学习
[解决办法]
回帖是一种美德!
[解决办法]
得永生 哈哈
[解决办法]
回帖是一种美德!
[解决办法]
回帖是一种美德!
[解决办法]
study
[解决办法]
[解决办法]
mark
[解决办法]
mark
[解决办法]