分享

实例讲解:ASP.NET水晶报表教程

 zhengknight 2011-03-10


作者: 佚名,  出处:IT专家网, 责任编辑: 谢妍妍, 
2010-07-14 11:03
  报表是应用程序中不可缺少的部分,一张好的报表,能直观地让人把握数据的情况,对决策起到重要作用。那么,如果才能更快捷、更高效地实现报表呢?本文以一个三层结构的ASP.NET程序为例,介绍如何使用crystalreport,来制作一份报表,其中介绍了不少ASP.NET水晶报表的技巧。

 

  由于要根据输入的日期,货品参数来动态显示报表,因此我们要设置参数字段。在报表设计器中,在字段资源管理器中,选择参数字段,鼠标右击选择“新建”,新建如下三个参数字段。

  名称: 类型:

  ItemId Number

  StartDate Date

  EndDate Date

  最后,要设置相关的查询公式,在除报表页眉的区域,鼠标右键点击,在弹出菜单中选择“报表|编辑选择公式|记录”,输入如下的公式:

  在上面的公式编辑器中,分为左中右三部分,左边的是报表的字段,中间的是相关的功能函数,最右边的是运算符,双击其中选中的部分,则可以添加到下部的公式显示区域中。最后,保存建立的公式。

  ASP.NET水晶报表教程之在程序中使用报表

  接下来,我们可以在程序中用代码处理和报表的连接过程。首先,在工程项目中,增加如下的两个命名空间的引用(注意,在代码中也必须用using引入它们):

  CrystalDecisions.CrystalReports.Engine CrystalDecisions.Shared

  在viewreport.aspx的Page_load事件中,加入以下代码

 

以下是代码片段:
  //接收传递的参数 nItemId=int.Parse(Request.QueryString.Get("ItemId"));
  strStartDate=Request.QueryString.Get("StartDate");
  strEndDate=Request.QueryString.Get("EndDate");
  //声明报表的数据对象 CrystalDecisions.CrystalReports.Engine.DatabasecrDatabase;
  CrystalDecisions.CrystalReports.Engine.TablecrTable;
  TableLogOnInfodbConn=newTableLogOnInfo();
  //创建报表对象opt ReportDocumentoRpt=newReportDocument();
  //加载已经做好的报表 oRpt.Load("F:\\aspnet\\WroxWeb\\ItemReport.rpt");
  //连接数据库,获得相关的登陆信息 crDatabase=oRpt.Database;
  //定义一个arrtables对象数组 object[]arrTables=newobject[1];
  crDatabase.Tables.CopyTo(arrTables,0);
  crTable=(CrystalDecisions.CrystalReports.Engine.Table)arrTables[0];dbConn=crTable.LogOnInfo;
  //设置相关的登陆数据库的信息
  dbConn.ConnectionInfo.DatabaseName="WroxSellers";dbConn.ConnectionInfo.ServerName="localhost";
  dbConn.ConnectionInfo.UserID="sa";
  dbConn.ConnectionInfo.Password="test";
  //将登陆的信息应用于crtable表对象
  crTable.ApplyLogOnInfo(dbConn);
  //将报表和报表浏览控件绑定 crViewer.ReportSource=oRpt;
  //传递参数 setReportParameters();

 

  在上面的代码中,首先接收了日期,货品编号等参数,并实例化了Database,Table和TableLogOnInfo三个类,它们是用来在运行时,建立报表和数据库的连接必需的。再使用

  oRpt.Load("F:\\aspnet\\WroxWeb\\ItemReport.rpt");

  来装载已经做好了的报表。

  在装载完报表后,将数据库中要使用的表复制到一个对象数组中去,并选择对象数组中的第一个表元素,将其转换为水晶报表的报表对象。接着,再设置LOGONINFO中的登陆数据库的信息。最后,将报表源与报表浏览控件绑定。

  ASP.NET水晶报表教程之传递参数到ASP.NET水晶报表

  定义一个新的过程,setReportParameters(),代码如下:

 

 

以下是代码片段:
 privatevoidsetReportParameters()
  {
  //alltheparameterfieldswillbeaddedtothiscollection ParameterFieldsparamFields=newParameterFields();
  //theparameterfieldstobesenttothereport ParameterFieldpfItemId=newParameterField();
  ParameterFieldpfStartDate=newParameterField();
  ParameterFieldpfEndDate=newParameterField();
  //设置在报表中,将要接受的参数字段的名称 pfItemId.ParameterFieldName="ItemId";
  pfStartDate.ParameterFieldName="StartDate";
  pfEndDate.ParameterFieldName="EndDate";
  ParameterDiscreteValuedcItemId=newParameterDiscreteValue();
  ParameterDiscreteValuedcStartDate=newParameterDiscreteValue();
  ParameterDiscreteValuedcEndDate=newParameterDiscreteValue();
  dcItemId.Value=nItemId; dcStartDate.Value=DateTime.Parse(strStartDate);
  dcEndDate.Value=DateTime.Parse(strEndDate);
  pfItemId.CurrentValues.Add(dcItemId);
  pfStartDate.CurrentValues.Add(dcStartDate);
  pfEndDate.CurrentValues.Add(dcEndDate);
  paramFields.Add(pfItemId);
  paramFields.Add(pfStartDate);
  paramFields.Add(pfEndDate);
  //将参数集合绑定到报表浏览控件 crViewer.ParameterFieldInfo=paramFields;
  }

 

  现在来解释一下上面的代码。在水晶报表中,浏览器控件有一个属性parameterfieldsinfo,该属性可以通过绑定parameterfields类型的集合,将相关的参数的实际数值传递到报表。Parameterfields类型集合通过add的方法,接收Parameterfield类型的对象。因此,我们先为itemid,startdate,enddate三个参数创建parameterfield类型的对象,并且设置它们对应报表中接受参数的名称:

 

以下是代码片段:
 ParameterFieldsparamFields=newParameterFields();
  ParameterFieldpfItemId=newParameterField();
  ParameterFieldpfStartDate=newParameterField();
  ParameterFieldpfEndDate=newParameterField();
  //设置在报表中,将要接受的参数字段的名称
  pfItemId.ParameterFieldName="ItemId";
  pfStartDate.ParameterFieldName="StartDate";
  pfEndDate.ParameterFieldName="EndDate";

 

  接着,可以为这些参数字段设置具体的值了,但由于parameterfield必须接受ParameterDiscreteValue类型的对象,所以,再创建相关的实例:

 

以下是代码片段:
 ParameterDiscreteValuedcItemId=newParameterDiscreteValue();
  ParameterDiscreteValuedcStartDate=newParameterDiscreteValue();
  ParameterDiscreteValuedcEndDate=newParameterDiscreteValue();
  dcItemId.Value=nItemId;
  dcStartDate.Value=DateTime.Parse(strStartDate);
  dcEndDate.Value=DateTime.Parse(strEndDate);

 

  最后,就可以在三个parameterfield的对象中的currentvalues中设置它们的值,并往paramFields集合中加进这三个parameterfield对象。

  运行的结果如下。

  以上ASP.NET水晶报表教程相关程序在VS.NET2003,crystalreport9以上版本可以正确运行。

 


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多