1 关于报表
不可否认,crystal report 是一个很好的报表设计控件。其实我觉得学习水晶报表的制作有点类似于学习word,很多东西可能都可以通过简单的鼠标的点击来完成,当然了如果要完成一些比较高级的功能,则要通过编写代码,这就好象学习word一样,一些高级的功能可以通过编写宏来完成。
对于我们来说,由于需要制作出比较专业的报表,所以编程是必不可少的。
感觉制作报表有些类似于制作word的模板。设计的时候只是设计显示的方式,而实际显示的时候需要从资料源读取资料。
大体翻阅了一下crystal report,完全是基于图形的一些操作,只要通过一些按钮或是菜单的点击即可完成一个报表的设计,正本书从头到尾没有一行代码,看来这个我完全可以在这周的时间把它学完。 上面的这段话其实是不对的,在最后一章是有代码的。
2 水晶报表的使用
2.1 入门基础
默认情况下会显示好几个节,但是就实际操作而言,并不见得会用到所有的节,所以最好把不用的节的高度设置为0。
2.2 小结
通过一个下午的学习,暂时觉得在crystal report中,节的概念是非常重要的,一定要充分利用。
另外不能被书本牵着鼻子走,首先要明白自己究竟需要学什么,然后再从书本中寻找自己需要的东西,这样效率才会高,而且不会有迷失的感觉。不然即使把书看完,我估计不会有很大的收获。
3 《用实例学crystal report》章节分析
3.1 Crystal Report Designer
本章主要是一些关于designer的用法,感觉就像当初写论文的时候学习word,主要是关于报表简单排版的说明。比如页眉、页脚、页码等等。
开始有点明白为什么需要多个Detail Section了,假设只有一个detail section,那么在现实报表的时候,正文部分就是该section的不断重复,如果有多个section,那么就是这多个section一次不断的重复,比如现在有a,b,c三个section,则显示应该是这样的:
a
b
c
a
b
c
…
3.2 设置报表的资料源并提报表添加字段
其实每章究竟介绍一些什么内容在其章节名字中已经讲的很清楚了。本章主要就是介绍了报表资料源相关的一些内容:如何连接access,excel,sql server等数据库。如何更换已经连接了的数据源的位置。
3.3 在报表中加入与格式化各类对象
crystal report 在格式化方面最重要的特性就是允许:条件格式化;
所谓条件格式化就是允许对象在打印的时候根据报表资料或其它条件动态设置其格式。
添加格式化这项功能真的是太好了,绝大部分属性都可以编辑条件公式。
Crystal report的text对象最好的一个特性就是允许将数据库的字段插入进来,这意味着你可以轻易的将动态的字段内容和固定不变的静态文本结合在一起,而制作出类似于信件与通知函之类的报表。
而事实上还有一个秘密是这样的,不仅仅是数据库的字段可以加入到text对象中,公式字段也可以。
3.3.1 格式化字段
对于包含地址自传等内含大量数据的字段设置成可以扩大。
3.3.2 公式字段
公式字段是十分重要的,因为在某些情况下,你要打印的数据必须针对字段数据加以运算或处理,此时公式字段就显示出他独特的优势了。说白了,公式字段就是根据现有的一个或多个字段的内容执行所需的运算或处理以便求得我们所需要的结果。
3.3.3 特殊字段
特殊字段就是crystal report针对一些常用功能而预定义的一些公式字段。
关于公式字段我的理解是这样的:公式字段其实就有点类似于word里头的宏,word里头的宏是可以有用户自己来编辑的,而且也是采用vb的语法。而特殊字段就类似于word自带的一些宏。
3.3.4 报表对象内嵌超级链接
主要用来发邮件或者连接到某个主页。
3.4 如何排序报表数据
通过sql语句进行排序,注意对于excel表不能使用sql语句。
如果采用报表本身提供的排序方式,则不能根据blob字段来进行排序。
3.5 如何分组报表数据
在我看来,本章的重点有以下三点:嵌套组、层次分组和自定义组;
更改组的相关设置。
3.5.1 如何自定义组
一般来说,我们会使用字段内容重复性高的数据库字段或公式字段来作为组名字段,亦即以该字段来作为分组字段。如果重复性不高,也就失去了分组的意义。
在自定义组的时候采用公式是最简单的。而且我觉得我也比较习惯于用formula,不过我得稍微把vb的语法看看。
3.5.2 sumary
该字段放在哪个区域就是对那个区域进行统计,如果放在组的范围内,就是对组内的数据进行统计,如果放在页则对页进行统计,如果放在report中,则对整个报表进行统计。
3.5.3 Running total field
该字段用于进行一些累计计算。该字段放在不同的节会有不同的效果。而事实上,一般会把它放在组页脚或报表页脚来计算特定组或整份报表中符合特定条件的统计信息。
该field可以对选取的字段进行各种计算,比如可以进行平均值,累加,计数等等。
3.6 如何筛选报表数据
报表数据的筛选其实又分为图形界面的操作方式和基于公式的操作方式,而归根结底,其实都是基于公式的操作方式。
以后如果想要成为一个报表制作的专家,则必定要采用基于公式的编辑方式。
而要采用基于公式的编辑方式,则一定要学习basic的语法以及他的一些常用函数。
3.7 如何使用交叉表和图表
3.7.1 交叉表
交叉表不能摆放在页眉和页脚中,只能摆放在报表的页眉页脚和组的页眉页脚中,根据摆在报表的页眉和组的页眉的不同,分析的数据对象也将有所不同。
3.7.2 图表
图表也不能摆在页眉详细资料和页脚中。
3.8 排序字段
排序有两种手法:一种是通过查询语句来对数据源的数据进行排序;一种就是用水晶报表来对数据进行排序。不过其实我们一般不推荐采用水晶报表来对数据进行排序。这样水晶报表就承载了他多的东西。
3.9 将报表集成到web应用程序中
往web中添加报表可以依靠两种对象模型:
CrystalReportViewer和CrystalReportEngine,其中通过第二个模型可以对报表的结构和内容进行完整的控制。
不过CrystalReportEngine有一个缺点就是,他不能够提供报表显示的功能,所以采用CrystalReportEngine的时候,仍然要使用CrystalReportViewer来查看报表,不过在此时最好让CrystalReportViewer紧紧是实现报表查看的功能,所有的其他功能都由CrystalReportEngine来完成。这样就可以保持功能的一贯性。
那么这两个模型的用法怎么说呢:当你的web应用程序知识但存的预览和打印报表,那么用CrystalReportViewer就足够了,如果你想要在程序中实现对报表的各种控制,那么就要想到使用CrystalREportEngine。
本章节最后提供了一些范例,这些范例都有一些简单的程序配合使用,对于一些简单的应用只要参考这些范例就可以了。没有必要使用下一张的engine。
3.10 活用Crystal report engine
crystal report engine 最大的好处在于允许开发人员在运行阶段对报表的结构和内容进行完整的控制。
3.10.1 强类型与非类型报表组件
强类型报表组件会在设计阶段就和项目中的某个报表相关联。也就是说,当应用程序运行的时候,强类型报表组件只能载入在设计阶段与其关联的报表文件;
非类型报表不会再设计阶段与任何报表有所关联,事实上费类型报表组建会在运行阶段去调用load方法来载入特定的报表。
那么这里就牵涉到ReportDocument来做为CrystalReportViewer的ReportSource的问题。
3.10.2 数据库相关的处理
数据库相关的处理主要就牵涉到CryatalDecisions.CrystalReports.Engines名字空间中的Database类及其相关类的使用。
(1) 登录数据库;
由于Crystal report for vs.net支持业界的各种数据源,允许跨数据源查询,为此,很难建立一组账号和密码来适应于报表的所有数据源,为此,crystal report engine对象模型的做法是通过tables类个别针对报表所使用的每一个数据表来设置连接信息。
这里有一点要注意的是,在对数据表的一些属性作了修改之后,要通过Table.ApplyLogOnInfo()方法来把这个修改提交。
(2) 本节提供了一些实际应用的例子,比如在运行的时候动态制定某个数据表的用户名密码等信息,这些在实际应用的时候有很好的参考价值。
(3) 设置数据表的位置
其实在此前的学习过程中,我们曾经学过如何通过简单的鼠标点击来更改数据库的位置,那么在这里我们将学习到如何通过代码来动态的更改数据库的位置。那就是通过Table.Location属性。