VS.NET中Crystal Reports的使用
2007-07-05陈平池同柱
陈 平 池同柱
摘要:介绍了Crystal Reports功能、结构和特点.通过在VS.NET创建具体的Windows应用演示了Crystal Reports的强大功能。
关键词:VS.NETCrystalReports
中图分类号TP312文献标识码A文章编号:1002-2422(2007)03-0019-02
1Crystal Reports简介
1.1Crystal Reports的功能
(1)支持多种数据源和强大的内容创建功能;(2)交互式和自定义功能;(3)将报表并入应用程序。
1.2Crystal Reports的结构
Crystal Reports访问数据库文件需要经过三层(如图1):Crystal Reports作为接口运行,通过此接口可以对数据库文件中存储的数据进行格式化、排列、选择和排序。它通过与数据转换层中的一个或多个文件通讯来获取数据,此数据转换层通过一组专用于Crystal Reports的DLL对来自不同数据源的数据进行转换。
Crystal Reports Designer用于报表的设计,用户可以在报表设计过程中设置报表的标题、插入数据、公式、图表、子报表等操作。
Crystal Reports Viewer是用于查看报表的控件。对于Web应用和Windows应用分别有不同的Viewer控件,但其功能基本相同,主要用途都是查看应用程序中的报表。除此之外,查看器控件对报表的控制是非常有限的。
报表文件是在Crystal Reports Designer中设计的,用来确定来自数据源的数据显示方式的文件,默认安装方式下VS.NET已经安装一些报表文件(.rpt)示例。
1.3Crystal Reports的执行模式
DataSouree是报表文件中数据的来源。报表文件取得数据的方法有两种:一种是让Crystal Reports自己选择数据而不使用任何代码;另一种是手动编写代码组装DataSet,然后将DataSet作为数据源绑定到报表文件。
对应两种不同的取数据的方法,Crystal Reports有两种执行模式:
(1)Pull模式:被请求时,Crystal Reports直接根据指定的驱动连接数据库,然后组装这些数据。
(2)Push模式:开发人员需要自己编写代码连接数据库并组装DataSet,同时将DataSet中的数据传送至Crysta]-Reports。
1.4Crystal Reports的报表类型
(1)Strongly-Typed报表:如果报表被加入到项目中去,则该报表即为Stronsly-Typed报表。此时用户拥有创建报表对象的权力,能够减少代码并提高性能。
(2)Un-Typed报表:如果报表不直接包含在项目中,称为Un-Typed报表。此时,用户需要用Crystal Reports的ReportDocument对象创建一个实例,并手动调用报表。
2Crystal Reports在VS.NET中的应用
2.1建立到数据源的连接
Crystal Reports支持多种类型数据的访问,如访问ODBC数据源、OLEDB数据源、Excel、Access中的数据、XML、OLAP数据源。用户可以根据报表中数据的具体来源建立到相应数据源的连接。若在Windows应用中报表的数据来源于SQL Server2000,可在VS.NET中从“工具箱”的“数据”选项卡上将“sqlConnection控件”拖到报表窗体中,在窗体下方显示该控件自动命名为sqlConnection1。
在sqlConnection1控件的属性窗口中配置Connection-String属性,选择“新建连接”,指定数据库服务器名称为“TBDYJ”,选取合适的身份认证方式并输入身份认证信息,如果正确即可继续选取该数据库服务器上的数据库“students”,认证信息不正确则无法继续进行。
2.2建立数据适配器
从VS.NET的“工具箱”的“数据”选项卡中拖动“sql-Data.Adapter控件”到将要创建报表的窗体中去,建立名为sqlDataAdapter1的数据适配器同时自动弹出数据适配器向导对数据适配器进行配置。选了刚刚建立的到数据库连接,选择“使用SQL语句”访问数据库,通过“查询生成器”将对视图V_stud的查询作为数据适配器访问数据库students的方式。
按照同样的方式再创建两个数据适配器sqlDataAdapter2和sqlDataAdapter3,分别配置为通过对视图V_course、V_sc查询来访问数据库students。
2.3生成ADO.NET数据集对象
选取sqlDataAdapter1并右键单击选中快捷菜单中的“生成数据集”,此时会弹出“生成数据集”的对话窗口,在其中选择“新建”并输入新创建的数据集对象的名称,默认为DataSet1,此时系统自动在当前项目中添加一个名为DataSet1的数据集对象,同时生成数据集对象DataSet1的一个实例,默认名称为DataSet11,并为数据集建立架构,其中包含了数据库students中视图V_stud及其字段和类型的描述,但并不包括实际数据。
2.4设计新报表
若准备在当前的工程中创建三种不同的报表分别显示学生情况、课程情况和每门课程学生选修情况及成绩,必须根据三种报表所要反映的内容创建三种不同类型的报表。
先创建反映学生情况的报表。在“解决方案资源管理器”中选取当前的工程名称,右键单击在快捷菜单中选取“添加新项”,并在弹出的窗口的“模板”中选取“Crystal Report”,再输入名称即可,默认为CrystalReport1,此时即建立了一个新的报表类同时自动打开报表创建向导,用户可充分利用这些向导快速创建各种类型的功能强大的报表,在向导的帮助下可以快速选取报表中使用的数据来源(来源于刚刚生成的数据集DataSet11中的表V_stud)、选取在报表中要显示的字段、数据分组的依据字段、是否进行总计、对报表中的数据进行筛选、报表类型、图表类型等。设置完成后,可在报表设计器中对刚刚设置过的报表样式外观进行修改和调整。
依同样的方法可建立另外两个报表文件CrystalReport2和CrystalReport3,分别用来显示课程信息和学生成绩信息。
2.5添加“CrystalReportViewer”控件
CrystalReportViewer是用于查看报表文件的控件,从
“工具箱”的“Windows窗体”中选取CrystalReportViewer控件到窗体中去,默认名字为CrystalReportViewer1,为了能够在一个报表查看控件中查看三种不同的报表,可以窗体上再添加一个ComboBox控件comboBox1,在其属性Items中设置三个选项:学生信息表、课程信息表、成绩信息表,以方便用户通过不同选择查看不同的报表。
2.6添加事件处理代码
采用数据访问的push模式,将数据从数据源中需要的数据推入数据集中,并将在报表所在的窗体加载事件(Form_Load事件)中添加如下代码:
sqlDataAdapter1.Fill(dataSetll,“V_stud”);
CrystalReport1 myrpt=new CrystalReport1();
myrptSetDataSource(dataSetll);
crystalReportViewer1.ReportSource=myrpt;
可以通过ComboBox控件来选择所要查看的报表文件,还必须在comboBox1控件的SelectedindexChanged事件中添加如下代码:
switch(int32.Pame(comboBox1.Selectedindex.ToString())){
case 0:{
sqlDutaAdaptcr1.Fill(dataSet11,“V_stud”);
CrystalReport1 myrpt=new CrystalReport1();
myrpt.SetDataSource(dataSet11);
crystalReportViewer1.ReportSource=myrpt;
break;}
case 1:{
sqlDataAdapter2.Fill(dataSetll,“v_cou”);
CrystaReport2 myrpt=new CrystalReport2();
myrpt.SetDataSource(dataSet11);
crystalReportViewcr1.ReportSource=myrpt;
break;}
case 2:{
sqlDataAdapter3.Fill(dataSet11,“V_SC”);
CrystalReport4 myrpt=new CrystalReport4();
myrpt.SetDataSource(dataSet11);
crystalRcportViewer1.ReportSource=myrpt;
break;}
3结束语
本文通过使用Crystal Reports的Push数据访问模式在Windows应用程序中建立复杂的图表应用,展示了CrystalReports的功能:对于报表的更复杂的控制,可以使用通过非类型化的报表组件,在程序中进行控制。