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、
V
_
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.


发布评论