首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 笔记本电脑 | 北大青鸟 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
Google
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> ASP.NET >> 正文

ASP.NET中利用Crystal Report创建图表

  在上面的公式编辑器中,分为左中右三部分,左边的是报表的字段,中间的是相关的功能函数,最右边的是运算符,双击其中选中的部分,则可以添加到下部的公式显示区域中。最后,保存建立的公式。 
   
  在程序中使用报表 
   
  接下来,我们可以在程序中用代码处理和报表的连接过程。首先,在工程项目中,增加如下的两个命名空间的引用(注意,在代码中也必须用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.Database crDatabase; CrystalDecisions.CrystalReports.Engine.Table crTable;
   TableLogOnInfo dbConn = new TableLogOnInfo();
   // 创建报表对象opt
   ReportDocument oRpt = new ReportDocument();
   // 加载已经做好的报表
   oRpt.Load("F:\\aspnet\\WroxWeb\\ItemReport.rpt");
   //连接数据库,获得相关的登陆信息
   crDatabase = oRpt.Database;
   //定义一个arrtables对象数组
   object[] arrTables = new object[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中的登陆数据库的信息。最后,将报表源与报表浏览控件绑定。 
   
  传递参数到水晶报表
  
     定义一个新的过程,setReportParameters(),代码如下:
  
   private void setReportParameters()
   {
   // all the parameter fields will be added to this collection
   ParameterFields paramFields = new ParameterFields();
   // the parameter fields to be sent to the report
   ParameterField pfItemId = new ParameterField();
   ParameterField pfStartDate = new ParameterField();
   ParameterField pfEndDate = new ParameterField();
   // 设置在报表中,将要接受的参数字段的名称
   pfItemId.ParameterFieldName = "ItemId";
   pfStartDate.ParameterFieldName = "StartDate";
   pfEndDate.ParameterFieldName = "EndDate";
   ParameterDiscreteValue dcItemId = new ParameterDiscreteValue();
   ParameterDiscreteValue dcStartDate = new ParameterDiscreteValue(); ParameterDiscreteValue dcEndDate = new ParameterDiscreteValue();
  
   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类型的对象,并且设置它们对应报表中接受参数的名称:
  
   ParameterFields paramFields = new ParameterFields();
   ParameterField pfItemId = new ParameterField();
   ParameterField pfStartDate = new ParameterField();
   ParameterField pfEndDate = new ParameterField();
   // 设置在报表中,将要接受的参数字段的名称
   pfItemId.ParameterFieldName = "ItemId";
   pfStartDate.ParameterFieldName = "StartDate";
   pfEndDate.ParameterFieldName = "EndDate";
  
     接着,可以为这些参数字段设置具体的值了,但由于parameterfield必须接受P arameterDiscreteValue类型的对象,所以,再创建相关的实例:
  
   ParameterDiscreteValue dcItemId = new ParameterDiscreteValue();
   ParameterDiscreteValue dcStartDate = new ParameterDiscreteValue();
   ParameterDiscreteValue dcEndDate = new ParameterDiscreteValue();
   dcItemId.Value = nItemId;
   dcStartDate.Value = DateTime.Parse(strStartDate);
   dcEndDate.Value = DateTime.Parse(strEndDate); 
   
  最后,就可以在三个parameterfield的对象中的currentvalues中设置它们的值,并往paramFields集合中加进这三个parameterfield对象。 
   
  运行的结果如下。
  
  

   

上一页  [1] [2] [3] [4] 

【责编:yuan】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·开源软件测试工具学习专题
 ·JSP Web开发 入门基础到高手进阶教程…
 ·JavaFX—是Java桌面的新希望么?
 ·安全至上 .NET开发安全策略…
 ·测试用例设计之道-测试用例学习专题
 ·面向Java开发人员的Scala指南
 ·Java设计模式之实例详解
 ·Oracle数据库11g 面向DBA和开发人员的重要新特性…
 ·桌面应用软件编程 J2SE技术详解…
 ·我“炫”我精彩-------WPF开发教程
 今日更新
 社区讨论
 博客论点
 频道精选
 Dotnet频道相关导航