2024年4月3日发(作者:)

维普资讯

2007年6月 电 脑 学 习 第3期 

VS.NET中Crystal Reports的使用 

平 池同柱 

要:介绍了Crystal Reports功能、结构和特点.通过在VS.NET创建具体的Windows应用演示了Crystal Reports的强大 

功能。 

关键词: VS.NET 

中图分类号TP312 

CrystalReports 

文献标识码A 文章编号:1002—2422(2007)03一oo19~02 

The Application of Crystal Reports in VS.NET 

Chen PiIlg Chi Tongzhu 

Absti'act:The paper introduces the function、structure and characteristic of Crystal Reports,and shows the powerful function 

of Crystal Reports by creating a detailed Windows application in VS.NET. 

Keyword:VS.NET CrystalReports 

1 Crystal Reports简介 

1.1 Crystal Reports的功能 

然后将DataSet作为数据源绑定到报表文件。 

对应两种不同的取数据的方法,Crystal Reports有两种 

(1)支持多种数据源和强大的内容创建功能;(2)交 

互式和自定义功能;(3)将报表并入应用程序。 

1.2 Crystal Reports的结构 

Crystal Reports访问数据库文件需要经过三层(如图 

执行模式(见图2、图3): 

Crystl Reporats 数据库 

厂] 日 

L厂_, 

图2 Pull模式 

Crystl Reporats 

1):Crys ̄l Reports作为接口运行,通过此接口可以对数据 

库文件中存储的数据进行格式化、排列、选择和排序。它通 

过与数据转换层中的一个或多个文件通讯来获取数据,此 

数据转换层通过一组专用于Crystal Reports的DLL对来 

自不同数据源的数据进行转换。 

[=] 

图3 Push模式 

(1)Puu模式:被请求时,Crystla Reports直接根据指 

Crystal Reports层H Crystla Reports层 

图1 Crystal Reports访问数据库 

定的驱动连接数据库,然后组装这些数据。 

(2)Push模式:开发人员需要自己编写代码连接数据 

库并组装Data,Set,同时将DataSet中的数据传送至Crystal- 

Reports。 

Crystal Reports Designer用于报表的设计,用户可以在 

报表设计过程中设置报表的标题、插入数据、公式、图表、子 

报表等操作。 

Crystal Reports Viewer是用于查看报表的控件。对于 

Web应用和Windows应用分别有不同的Viewer控件,但其 

功能基本相同,主要用途都是查看应用程序中的报表。除此 

之外,查看器控件对报表的控制是非常有限的。 

报表文件是在Crystal Reports Desiner中设计的,用来 g

1.4 Crystal Reports的报表类型 

(1)Strongly-Typed报表:如果报表被加入到项目中 

去,则该报表即为Strongly—Typed报表。此时用户拥有创建 

报表对象的权力,能够减少代码并提高性能。 

(2)Un—Typca报表:如果报表不直接包含在项目中, 

称为Un_Typod报表。此时,用户需要用Crystal Reports的 

ReportDocument对象创建一个实例,并手动调用报表。 

2 Crystal Reports在VS.NET中的应用 

2.1建立到数据源的连接 

Crystal Reports支持多种类型数据的访问,如访问 

ODBC数据源、OLEDB数据源、Excel、Access中的数据、 

XML、OLAP数据源。用户可以根据报表中数据的具体来源 

收稿日期:2007-01—11 

・19・ 

确定来自数据源的数据显示方式的文件,默认安装方式下 

VS.NET已经安装一些报表文件(.rpt)示例。 

1.3 Crystal Reports的执行模式 

DataSource是报表文件中数据的来源。报表文件取得数 

据的方法有两种:一种是让Crystal Reports自己选择数据 

而不使用任何代码;另一种是手动编写代码组装DataSet, 

}陈平河南工业职业技术学院计算机工程系讲师(南阳473009),研究方向:数据库技术、软件工程 

维普资讯

建立到相应数据源的连接。若在Windows应用中报表的数 

据来源于SQL Server2000,可在VS.NET中从“工具箱”的 

“数据”选项卡上将“SqlConneetion控件”拖到报表窗体 

中,在窗体下方显示该控件自动命名为sqlConneetionl。 

在sqlConneetionl控件的属性窗口中配置Connection— 

和CrystalReport3,分别用来显示课程信息和学生成绩信息。 

2.5添加“CrystalReportViewer”控件 

CrystalReportViewer是用于查看报表文件的控件,从 

“工具箱”的“Windows窗体”中选取CrystalReportViewer 

控件到窗体中去,默认名字为CrystalReportViewerl,为了能 

够在一个报表查看控件中查看三种不同的报表,可以窗体 

上再添加一个ComboBox控件comboBoxl,在其属性Items 

中设置三个选项:学生信息表、课程信息表、成绩信息表,以 

String属性,选择“新建连接”,指定数据库服务器名称为 

“TBDYJ”,选取合适的身份认证方式并输入身份认证信 

息,如果正确即可继续选取该数据库服务器上的数据库 

students”,认证信息不正确则无法继续进行。 

2.2建立数据适配器 

从VS.NET的“工具箱”的“数据”选项卡中拖动“SqL 

DataAdapter控件”到将要创建报表的窗体中去,建立名为 

saIDataAdapterl的数据适配器同时自动弹出数据适配器向 

导对数据适配器进行配置。选了刚刚建立的到数据库连接, 

选择“使用SQL语句”访问数据库,通过“查询生成器”将 

对视图V_stud的查询作为数据适配器访问数据库students 

的方式。 

按照同样的方式再创建两个数据适配器sqlDataAdapt— 

er2和sqlDataAdapter3,分别配置为通过对视图V course、 

_

sc查询来访问数据库students。 

2.3 生成ADO.NET数据集对象 

选取sqlDataAdapterl并右键单击选中快捷菜单中的 

“生成数据集”,此时会弹出“生成数据集”的对话窗口,在 

其中选择“新建”并输入新创建的数据集对象的名称,默认 

为DataSet1,此时系统自动在当前项目中添加一个名为 

DataSet1的数据集对象,同时生成数据集对象DataSetl的 

个实例,默认名称为DataSet1 1,并为数据集建立架构,其 

中包含了数据库students中视图V_stud及其字段和类型的 

描述,但并不包括实际数据。 

2.4设计新报表 

若准备在当前的工程中创建三种不同的报表分别显示 

学生情况、课程情况和每门课程学生选修情况及成绩,必须 

根据三种报表所要反映的内容创建三种不同类型的报表。 

先创建反映学生情况的报表。在“解决方案资源管理 

器”中选取当前的工程名称,右键单击在快捷菜单中选取 

“添加新项”,并在弹出的窗口的“模板”中选取“Crystal 

Report”,再输入名称即可,默认为CrystalReport1,此时即建 

立了一个新的报表类同时自动打开报表创建向导,用户可 

充分利用这些向导快速创建各种类型的功能强大的报表, 

在向导的帮助下可以快速选取报表中使用的数据来源(来 

源于刚刚生成的数据集DataSetl1中的表V_stud)、选取在 

报表中要显示的字段、数据分组的依据字段、是否进行总 

计、对报表中的数据进行筛选、报表类型、图表类型等。设置 

完成后,可在报表设计器中对刚刚设置过的报表样式外观 

进行修改和调整。 

依同样的方法可建立另外两个报表文件CrystalReport2 

・ 20 ・ 

方便用户通过不同选择查看不同的报表。 

2.6添加事件处理代码 

采用数据访问的push模式,将数据从数据源中需要的 

数据推入数据集中,并将在报表所在的窗体加载事件 

(Form_Load事件)中添加如下代码: 

sqlDataAdapter1.Fill(dataSet11.”V_stud ): 

CrystalReport 1 myrpt=new CrystalReport 1(): 

myrpt.SetDataSource(dataSet1 1): 

crystalReportViewer1.ReportSource=myrpt; 

可以通过ComboBox控件来选择所要查看的报表文件, 

还必须在comboBoxl控件的SeleetedIndexChanged事件中 

添加如下代码: 

switch(1nt32.Parse(comboBox1.SelectedIndex.ToString()))f 

case 0:f 

sqlDataAdapter1.Fil(dataSet11,"V

_

stud ); 

CrystalReport1 myrpt=new CIystalRep0n1(); 

myrpt.SetDataSouree(data.Set1 1): 

crystalReportViewer1.ReportSource=myrpt; 

break;} 

case 1:{ 

sqlDataAdapter2.Fill(data.Set 1 1,"v cour"); 

CrystalReport2 myrpt=new CrystalReport2(); 

myrpt.SetData.Source(dataSet1 1); 

crystalReportViewer1.ReportSource=myrpt; 

break;} 

case 2:f 

sqlDataAdapter3.iFl(dataSet1 l,”v

sc”); 

CrystalReport4 myrpt=new CrystalReport4(); 

myrpt.SetDataSource(dataSet1 1); 

crystalReportViewer1.ReportSource=myrpt; 

break;I 

3结束语 

本文通过使用Crystal Reports的Push数据访问模式在 

Windows应用程序中建立复杂的图表应用,展示了Crystal 

Reports的功能;对于报表的更复杂的控制,可以使用通过 

非类型化的报表组件,在程序中进行控制。 

参考文献 

【1】Shawn Wildermuth著,周靖译.ADO.NET实用指南【M】. 

北京:清华大学出版社,2003,(9):151—152. 

【2】Christian Nagel,等著,李敏波译.C#高级编程【M】.北 

京:清华大学出版社,2006(10):552—558.