欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET中水晶报表的使用方法详解

程序员文章站 2024-02-29 10:16:52
前一段时间,由于在项目中要用到报表做统计,所以我学习了一下asp.net水晶报表的使用。水晶报表的执行模式(也就是取数据的方法)可以分为两种: 第一种是pull模式:被请...

前一段时间,由于在项目中要用到报表做统计,所以我学习了一下asp.net水晶报表的使用。水晶报表的执行模式(也就是取数据的方法)可以分为两种:

第一种是pull模式:被请求时,水晶报表直接根据指定的驱动连接数据库然后组装这些数据。

另外一种就是push模式:此时开发者不得不自己编写代码连接数据并组装dataset,同时将它传送至报表。在些这种情况下,通过使用连接共享以及限制记录集合的大小,可以使用报表性能最大化。

水晶报表中的报表类型也分为两种:

--strongtyped 报表: 当你将报表文件加入到项目中去时,它就变成了一个了“ strongly-typed“报表。在这些情况下,你将拥有直接创建报表的对象的权力,这将减少一些代码并且能够提供一些性能。

--untyped报表:这里的报表并不直接包含在项目中,因此称为‘un-typed' 报表。在这种情况下,你不得不使用水晶报表的”reportdocuemt“对象建立一个实例,并且”手动“地凋用报表。

使用pull模式   我们将通过下面的这些步骤来通过pull模式来执行水晶报表
  1.首先创建rpt文件,并使用水晶报表设计接口设置一些必须的数据连接。
  2.拖放一个 crystalreportviewer控件至aspx页面,设置它的属性指定我们上一步创建的.rpt文件。
  3. 在代码中调用databind方法。

复制代码 代码如下:

reportdocument  reportdoc  = new  reportdocument();
reportdoc.load(server.mappath("mypulldemo.rpt"));
#region 解决登录错误问题
tablelogoninfo  logoninfo  = new tablelogoninfo();//
foreach( crystaldecisions.crystalreports.engine.table tb in reportdoc.database.tables)
{
logoninfo = tb.logoninfo;
logoninfo.connectioninfo.servername = "(local)";
logoninfo.connectioninfo.databasename = "mydatabase";//
logoninfo.connectioninfo.userid = "sa";
logoninfo.connectioninfo.password = "sa1234";//
tb.applylogoninfo(logoninfo);
}
#endregion
crystalreportviewer1.reportsource = reportdoc;

crystalreportviewer1.databind();


使用push模式
  我们采用下面的几步使用push模式执行水晶报表:
  1. 设计一个dataset
  2. 创建一个.rpt文件同时将其指定给上一步建立的dataset。
  3. 在aspx页面中拖放一个crystalreportviewer控件同时将其与前面的rpt文件建立联系。
  4. 在代码中访问数据库并把数据存入dataset
  5. 调用databind方法。

复制代码 代码如下:

reportdocument reportdoc = new reportdocument();
reportdoc.load(server.mappath("mypushdemo.rpt"));
string strprovider = "server=(local);database=mydatabase;uid=sa;pwd=sa1234";
sqlconnection myconn = new sqlconnection(strprovider);
myconn.open();
string strsel = "select * from saleofcuntry";
sqldataadapter myadapter = new sqldataadapter(strsel,myconn);

--这里的ds与.rpt文件连接数据库所用的dataset结构完全相同,名称可以不同

建立.rpt文件时dataset的作用是为rpt文件提供一种架构。

这里 用dataadapter填充数据集的一个实例,作为报表的数据源。

复制代码 代码如下:

dataset ds = new dataset();
myadapter.fill(ds,"saleofcuntry");
reportdoc.setdatasource(ds);
crv.reportsource = reportdoc;

crv.databind();