6-3 水晶报表的执行模式和类型
6-3-1 水晶报表的执行模式
水晶报表的执行模式分两种模式:Pull 模式(拉模式)Push 模式(推模式)。
所谓Pull 模式是指被请求时,水晶报表直接根据指定的驱动连接数据库然后组装这些数据,当然这种方式不需要编写任何代码。
而Push 模式由开发者自己编写代码连接数据并组装DataSet,同时将它传送至报表。在些这种情况下,通过使用连接共享以及限制记录集合的大小,可以最大化的使用报表的性能。当然这种方式需要开发者自行编写大量的代码,推动水晶报表产生用户需要的数据。
6-3-2 水晶报表的类型
水晶报表的类型主要包括两种:Strongly-typed报表和Un-Typed 报表。所谓Strongly-typed报表是指当你将报表文件加入到项目中去时,它就变成了一个了“strongly-typed”报表。在这些情况下,你将拥有直接创建报表对象的权力,这将减少一些代码并且能够提供一些性能。
而Un-Typed 报表是指该类型报表并不直接包含在项目中,因此称为“un-typed”报表。在这种情况下,你不得不使用水晶报表的“ReportDocuemt”对象建立一个实例,并且需要通过程序动态凋用并操控报表中的具体对象。
6-3-3 案例学习:Pull模式的应用
本次实验目标是通过水晶报表设计器,采用PULL模式的手段,实现对数据库表信息的报表显示功能。
u
实验步骤1:
右击“解决方案浏览器”,在弹出的菜单中选择“添加”-> “添加新项”->“Crystal Report”基本界面如图6-4所示。
图
6-4
新建水晶报表文件
u
实验步骤2:
在“Crystal Report库”中选择“作为空白报表”单选按钮,点击“确定”。基本界面如图6-5所示。
图
6-5
建立空白水晶报表
u
实验步骤3:
这样就会出现一个水晶报表设计器界面,该界面设计层次共分为五部分:报表页眉区,页眉区,详细资料区,报表页脚区,页脚区。其分别的作用为:
Ø
报表页眉区:
主要用以显示报表的首页表头信息内容,如政府“红头文件”的红头部分就是报表页眉区。
Ø
页眉区:
每页报表表头信息内容,如成绩表格信息内容的表格头部信息就是页眉区。
Ø
详细资料区:
具体数据显示区域,主要来自数据库中表信息的内容,也是决定报表内容多少的关键区域。
Ø
报表页脚区:
主要用以在报表的最后一页尾部显示信息内容,如对于所有详细资料区数据的统计工作常常在这个区域呈现。
Ø
页脚区:
每页页脚显示的信息,如“第××页”就属于页脚区。
基本界面如图6-6所示。
图
6-6
水晶报表设计界面的五个区域
u
实验步骤4:
右击报表中的“详细资料区”,选择“数据库”->“数据库专家...“。在弹出的“数据库专家”中,扩展“OLE DB(ADO)”选项,此时会弹出另外一个“OLE DB(ADO)”窗口。基本界面如图6-7所示。
图
6-7
通过数据库专家连接数据库
u
实验步骤5:
在“OLE DB (ADO)”弹出窗口中,选择“Microsoft OLE DB Provider for SQL Server”,然后点击“下一步”,基本界面如图6-8所示。
图
6-8
选择数据源类型
u
实验步骤6:
指定连接的信息(如选择Pubs数据库),单击“下一步”,最后单击“完成”按钮,基本界面如图6-9所示。
图
6-9
选择具体数据库
u
实验步骤7:
这时你就能在“数据库专家”窗口中看到我们选择的数据库。在可用数据源部分扩展“Pubs”数据库,扩展“表”,选择“employee”表并将其加到“选定的表”区中,单击“确定”按钮,完成对数据源的添加工作,基本界面如图6-10所示。
图
6-10
添加具体数据库中的表信息
u
实验步骤8:
现在回到水晶报表设计器界面,在左侧的“字段资源浏览器”中展开“数据库字段”,然后就会出现你刚才在数据库专家内选择的表以及表中的字段,基本界面如图6-11所示。
图
6-11
字段管理器中的字段内容
u
实验步骤9:
拖放需要的字段进入报表的“详细资料”区,字段名将会自动出现在”页眉“区。如果你想修改头部文字,则可以右击“页眉”区中的文字,选择”编辑文本对象“选项并进行编辑。保存并浏览信息,基本界面如图6-12所示。
图
6-12
水晶报表设计器设计和浏览界面
u
实验步骤10:
回到前面的WebForm中,拖放一个CrystalReport Viewer控件到页面中去,基本界面如图6-13所示。
图
6-13
拖放一个
CrystalReport Viewer
控件到页面中
u
实验步骤11:
调出当前Crystal Report Viewer控件的属性窗口,选择“ReportSource”区点击下拉列表,选择刚才建立的CrystalReport1报表文件(如图6-14所示)。则从数据库中拾取的数据将在水晶报表内出现,PULL模式的实验步骤结束。
图
6-14
配置
CrystalReport Viewer
控件的水晶报表源
6-3-4 案例学习:Push模式的应用
本次实验目标是通过水晶报表设计器,采用Push模式的手段,实现对数据库表信息的报表显示功能。
u
实验步骤1:
右击“解决方案浏览器”,选择“添加”--“添加新项”-->“数据集”。如图6-15所示。
图
6-15
建立数据集对象
u
实验步骤2:
从“服务器资源管理器”中的“SQL Server”中拖放“Stores”表(位于PUBS数据库中)。此时在数据集中就会有一个Stores表的结构图。如图6-16所示。
图
6-16
添加数据源连接选择数据库
u
实验步骤3:
创建一个新的.rpt文件,指定为空报表。如图6-17所示。
图
6-17
建立空报表
u
实验步骤4:
在新建的水晶报表设计界面,点击鼠标右键,选择“数据库”->“数据库专家...“。在弹出的“数据库专家”中,扩展“项目数据”,选择ADO.NET数据集,选择上一步添加的数据表,并移到选定的表区域。
这样就会在水晶报表设计界面的字段资源管理器中出现该数据集表,选择适当的字段拖到水晶报表详细资料区域。如图6-18所示。
图
6-18
配置数据源对象并拖拽相关字段到报表详细资料区域
u
实验步骤5:
新建WinForm窗体,拖放一个CrystalReport Viewer控件到页面中去,调出当前Crystal Report Viewer控件的属性窗口,选择“ReportSource”区点击下拉列表,选择刚才建立的CrystalReport2报表文件(如图6-19所示)。
图
6-19
配置
CrystalReport Viewer
控件的
数据源对象
u
实验步骤6:
运行后我们将看见一张空的报表,主要原因是DataSet对象所复制的仅仅是空的物理表的模式结构,而实质的数据必须通过编程的方式才可以实现。(如图6-20所示)。
图
6-20
数据源对象为数据集类型在直接运行后将显示空报表
u
实验步骤7:
用鼠标当前的WinForm界面,进入窗体的Load事件编码,并键入如下代码:
private
void Form2_Load(object sender, EventArgs e)
{
string connstring = "Server=(local);DataBase=pubs;UID=sa;PWD=";
//连接数据库
CrystalReport2 oCR = new CrystalReport2();//建立水晶报表对象oCR
SqlConnection MyConn = new SqlConnection(connstring);
MyConn.Open();//打开数据库连接
string strSel = "Select * from employee";//建立查询字符串
SqlDataAdapter MyAdapter = new SqlDataAdapter(strSel, MyConn);
MyAdapter.Fill(dataSet11, "employee");//创建DataSet数据集对象,并将查询到的数据填充之
oCR.SetDataSource(dataSet11);
//指定当前水晶报表对象的数据源为刚才建立的DataSet数据集对象
this.crystalReportViewer1.ReportSource = oCR;
//指定水晶报表视图控件的报表文件为刚才设定的oCR报表文件
}
|
运行后,则报表数据将正常显示出来。从这个实验我们不难看出,Push模式必须通过对数据集对象的再次编程并加载数据后,才可以起到数据填充的实际效果,否则数据库信息将无法被显示出来。
本章小结
n
水晶报表是用于创建报表的标准工具
n
水晶报表的优点包括:
Ø
运行时自定义
Ø
报表查看器与其他控件之间的交互
Ø
报表可以作为 Web 服务
n
开发 Windows 应用程序时,可以使用CrystalReportViewer控件将报表绑定到 Winform窗体上
n
ADO.NET 数据集设计器用于创建只包含数据结构而不包含实际数据的数据集对象
n
水晶报表中的选择公式可用于计算字段和汇总,确定如何显示报表的输出结果
课 后 练 习
1、请你描述水晶报表的执行模式(Pull 模式和Push 模式)的差异?
2、根据你所遇到的数据库,设计一个Pull 模式的水晶报表和一个Push 模式的水晶报表?
3、请你访问某部委网站,观察其颁发的部委“红头文件”,通过水晶报表设计并实现“红头文件”的水晶报表刊发系统。
(1)设计出“红头文件”页眉部分
(2)设计出“红头文件”正文部分
(3)设计出“红头文件”页脚部分
本文转自 qianshao 51CTO博客,原文链接:http://blog.51cto.com/qianshao/231838,如需转载请自行联系原作者