2007年中有项目要求用到水晶报表,当时查了很多资料,感觉都良莠不齐,尤其是很多文章在水晶报表显示的推模式(push)和拉模式(pull)中反复纠缠,让人感觉明显的捡了芝麻丢了西瓜。而单看 两个名词和英文就知道又是哪个懒惰的前辈生硬翻译过来。写下此文给刚入门的新手一个指点,也是自己学习过程的一个笔记。
所谓的那些推模式、拉模式以及我看到的很多例程,都明显有一个微软公司的通病(或许应该准确的称之为一种产品的理念),即过于专注于新用户的上手,而没有注意软件工程体系的完善。说明白点就是对于CrystalReport和ObjectDatasource,SQLdatasource控件类似,都能够把所有的联接数据库代码写在ASPX的页面文件上。这样新手可以很快的通过拷贝代码来实现自己的Hello World程序。但是如果用户有一定的开发经验,习惯于分层的系统开发模式,则对其有点勉为其难了。
进入正题,本文介绍的是在一个分层结构系统中asp.net页面上显示自己的报表,让报表具备打印、导出成为word,pdf等常用格式等能力。分层结构的DAO用ADO.NET的Dataset强类型。
1、数据准备
数据准备可以用存储过程,SQL语句,XSD强类型等等,总之生成一个DataTable或者类的集合
添加新项=>数据集TableA=>连接数据库,通过生成器生成SQL代码,得到TableA.getData() 方法,该方法返回一个数据表。
2、新增CrystalReport.rpt,CrystalReport.rpt编辑用数据库专家选择ADO.net,把上面准备的TableA拖入其中。再拖拽相应的字段到CrystalReport.rpt的“Section 3:详细资料”中.在“页眉”中会生成相应的字段说明。 拖拽一个文本对象到报表页眉上,命名为"TextHeard".
3、新建一个页面report.aspx,页面上放入控件CrystalReportViewer,CrystalReportSource。其中CrystalReportViewer是我们要显示报表的控件。
4、然后就是代码了
页面载入事件中要加Databind();






























































总结:开发水晶报表总体还是很简单的,毕竟是BusinessObjects的大作。入手关过了就达到了一定的水准了。报表倡导的把所有代码放在CrystalReport.rpt中的理念,我不太认同,这样不容易修改。而自己更习惯于把用SQL来生成报表,在表现层只进行相应的一些格式操作。CrystalReport.rpt可以写很多公式,达到使报表丰富多彩的目的。这里不再赘述。
另外开发的时候用户曾经要求只能生成PDF文档,而屏蔽WORD文档,颇费了些周章,最后代码就几行。
(1)屏蔽Crystalreportviewer里面的导出按钮。该按钮把所有的导出格式都完成了,实在是好啊,要是可以单独设置哪些允许导出的格式就好了。
Cystalreportviewer1.HasExportButton=false;
(2)新建另外的页面按钮。设置响应事件

















