.Net平台下水晶报表的应用研究

2012-04-29 00:44
软件工程 2012年7期
关键词:数据表水晶控件

报表作为信息组织和分析的有效手段和重要呈现形式,是企业管理信息系统的重要组成部分。如何方便、快捷、准确地生成各种统计报表,是一个值得研究的课题。本文通过对.Net平台下的报表应用进行研究,让读者对水晶报表的应用有个全面认识,并能够进行水晶报表的设计与开发。

.Net;水晶报表

1 引言

报表是一种数据管理工具,其目的是在于帮助用户快速掌握原始数据中的基本关系,以便进行有效的决策。水晶报表(Crystal Reports)是一款主要用于设计及产生报表的软件,是一个优秀的第三方报表开发工具,是业内最专业、功能最强的报表系统。它除了强大的报表功能外,最大的优势是实现了与Visual Studio所有开发工具的集成。

Visual Studio .Net中的水晶报表是一个实现原理比较复杂但使用方法十分简单的报表生成工具,它提供了非常丰富的模型,能够在运行时操作属性和方法,即可嵌入到C/S结构应用程序中,也可以加入到B/S结构的Web应用程序中。水晶报表可以在设计器中创建,用户可以设计标题、插入数据、公式、图表、子报表等操作。同时水晶报表查看器能够用于显示水晶报表的内容,包括图和表。此外,它还具有一些自带的功能,如翻页、跳转到某一页、打印报表、刷新、放大缩小和查找等。因此水晶报表查看器也是一种功能强大的控件。

2 .Net平台下水晶报表的控制模式

在.Net程序开发中,经常要对合并、汇总等进行编程,水晶报表大大简化了这些工作,用它能生成漂亮的图表和格式化文本,而且还能把报表导出为Word、Excel、PDF、HTML等格式。水晶报表程序控制上有两种模式,即拉(PULL)模式和推(PUSH)模式。选择的模式不同,程序实现上也会有很大差别。

2.1 拉模式(PULL)

拉模式是由水晶报表模板(引擎)直接连接数据库,从数据库里拉取数据。通常情况是我们在水晶报表里设置好数据库信息以及相关的表,当我们在程序中调用水晶报表引擎,挂载模板后,水晶报表引擎会根据模板里的数据库信息,及表信息主动连接数据库,返回数据给报表模板,模板根据设计样式进行呈现。

2.2 推模式(PUSH)

推模式是由应用程序从数据库获取数据,然后把数据推送给水晶报表引擎,水晶报表本身不跟数据库进行交互。使用推模式将会比拉模式要多写一些代码。

2.3 拉模式与推模式的比较

由于拉模式是直接连接数据库,和推模式相比,在推送给水晶报表引擎的过程中少了推送给中间结果集这么一个步骤,而中间结果集本身就占用系统资源,所以拉模式比推执行效率高。

在推模式中,数据库是由应用程序去连接的,水晶报表本身不连接数据库。这样,系统就能使用公用的数据库连接,也就节约了数据库的连接消耗。这一点,在多用户的系统环境内,少一次数据库连接对系统和系统性能的影响是比较关键的。

当然我们也应该注意到,推模式因为存在一个中间结果集,所以会占用系统资源,也正是因为这个中间结果集的存在,使得从数据库获取数据后,能够对数据进行再加工,从而使水晶报表更加灵活多变。所以在具体实现的时候,要综合考虑实际情况来决定采用哪种模式实现。

3 .Net平台下水晶报表的实现

.Net平台下水晶报表开发最重要的步骤是数据的获取。在拉模式中,数据获取这一步骤是由.Net内置的水晶报表引擎自动处理,不需要编写任何代码,因此这里主要讨论推模式的实现。实现过程主要涉及以下两个文件:数据集(.xsd文件)、水晶报表(.rpt文件)。

3.1 实现步骤

(1)建立解决方案,在其管理器中添加数据集,在解决方案中生成.xsd格式的文件。具体过程为:添加→添加新项→类别→数据→模板→数据集。

(2)在服务器资源管理器中,添加数据连接,选择所要连接的数据库,将数据表拖到之前建立好的数据集上,保存整个项目。

(3)在解决方案资源管理器中,添加“Crystal Report”模板,通过“报表专家”完成报表设计。具体过程为:报表专家→数据库专家→项目数据→ADO.NET数据集→选择所需数据集对象→插入数据表。

3.2 关键功能代码

(1)在项目的数据访问层编写获取数据表字段的方法GetFields,该方法返回的为数据集。

Public static DataTable GetFields()

{

Database db= DatabaseFactory.CreateDatabase fftConnectionString");

String strSql= "select 列名集合 from 表名 WHERE 条件";

DataTable dtc=db.ExecuteDataSet(CommandType.Text,strSq1).Tables[0];

return dtc;//通过命令方式生成数据表

}

(2)添加Web页面Page_Load事件处理程序。首先,实例化一个DataTable对象dtl,调用GetFields方法,将返回的数据集赋给dt1,然后将dt1绑定到相关显示及格式化控件上。其次,实例化一个DataSet对象ds2,创建新命名的DataTable,比如,MyDataTable,并为其添加新列,比如,MyCol1、MyCol2,后将ds2用Session保存。

using CrystalDecisions.Shared;//必须引入水晶报表的类库

using CrystalDecisions.CrystalReports.Engine;

CrystalReportSource1.ReportDocument.Load(Server.MapPath("CrystalReport.rpt"));//制定报表路径及文件

if (1sPostBack==false)//Form_Load()事件的部分代码

{

DataTable dtl=new DataTable();

DropDownList1.DataSource= dt1;//将数据表中的数据加载到显示或格式化数据空间,本例为DropDownList1.

DropDownList1.DataTextField="COLUMN_NAME";

DropDownList1.DataBind();

DataSet ds2=new DataSet();//生成数据集,本例为MyTable

ds2.Tables.Add("MyTable");

DataColurrm MyCol=new DataColumn();//生成数据列类,并添加新列

MyCol.ColumnName="MyCol1" ;

MyCol.DataType=System.Type.GetType ("System.String");

ds2.Tables["MyTable"].Columns.Add(MyCol);

MyCol=new DataColumn();

MyCol.ColumnName="MyCol2";

MyCol.DataType=System.Type.GetType("System.String");

ds2.Tables["MyTable"].Columns.Add(MyCol);

Session["dsTemp"]=ds2;//将数据集以变量形式保存为会话

}

(3)报表文件的绑定

DataTable MyTable=new DataTable();

MyCrysta1.SetDataSource(MyTable);//设置报表文件MyCrysta1的数据表来源

CrystalReportViewer1.ReportSource= MyCrysta1;//设置报表控件的报表文件来源

CrystalReportViewer1.Visible=true;//报表显示

4 利用向导制作报表

除了使用程序方式开发报表外,还可利用报表向导轻松地完成一个报表。首先新建一个WebSite,添加报表,向导会提示创建一个数据源并打开数据库工具,根据提示,很容易就能生成一个数据源,作为报表的数据来源。在报表设计器中,可以根据需要画出想要的报表,并从“数据源”中选择想要的数据。这样,就完成了一个报表,接下来就可以使用ReportViewer控件来显示这个报表了。新建一个WebForm,从工具箱中拖一个ReportViewer控件到页面上,它会提示你选择报表,我们就选择刚才设计的报表,运行程序就能看到想要的东西了。

5 结束语

在ASP.NET环境下采用水晶报表开发Web动态报表,利用水晶报表本身提供的报表设计器和.Net提供的丰富特性,通过推模型从数据库中读取满足查询条件的数据,从而灵活地产生报表输出。这种设计方法在系统开发中可以作为一种通用的查询方法,因此能够减少系统的开发和维护的工作量,极大地提高系统的开发效率。同时,可以减少系统的复杂度,增加报表系统开发的可复用度,是一种比较实用的报表系统解决方案。

参考文献

[1]张荣圣,侯鹏志,郭圣路.Crystal Reports 2008.水晶报表从入门到精通.北京:电子工业出版社,2010.

[2]刘彦博,等.Visual Studio技术大全.成都:人民邮电出版社,2009.

猜你喜欢
数据表水晶控件
一张水晶卡告诉你浪漫都在哪
湖北省新冠肺炎疫情数据表
基于列控工程数据表建立线路拓扑关系的研究
关于.net控件数组的探讨
迈向UHD HDR的“水晶” 十万元级别的SIM2 CRYSTAL4 UHD
蓝水晶般的大眼睛
寻找蓝水晶
图表
ASP.NET服务器端验证控件的使用
基于VSL的动态数据表应用研究