逍遥游

一直在想,怎样路好走一点,一直想,一直在崎岖中徘徊。
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

快速掌握 CrystalReport for .net

Posted on 2005-12-13 10:08  逍遥游  阅读(484)  评论(0编辑  收藏  举报
 

        几乎在所有的应用程序中报表都是程序员头疼的问题。在.net环境下包含了功能强大的报表工具: Crystal Report。它能很好的与数据库交互,做出各种漂亮的报表和分析图表(具体功能下边文章会更详细的介绍).
        事实上,今天的这篇文章是我前段时间为一家公司的讲课的课件,经过改版发表了出来希望能对所有在.net环境下开发报表的程序员一些帮助。由于我公司是做电子政务系统,所以严重的“中国式报表”巨多,所以我为为公司自己封装了一个报表控件,实现了报表单据中数据的录入、删除、显示、打印等功能。如有朋友预见类似的问题,我很乐意与你交流,共同学习。
e-mail:billzhangmingming@sina.com.cn
 
         从1993年开始,Crystal Report 就是Visual Studio 套件中的一部分。目前实际上已成为Visual Studio.NET 中的报表标准,在Windows 报表编写领域中居于领先地位,推动着Web报表的未来发展。
         最新的Visual Studio.NET 以集成开发环境(IDE)中整和了Crystal Report9.0,从而增强了Visual Studio.NET 的开发功能, Crystal Report 为开发人员提供了尽可能的API。

                         Crystal Report for .NET 的功能简介
        通过将Crystal Report 的报表处理功能整和到自己的数据库应用程序中,应用程序和Web开发人员可以节省开发时间来满足用户的需求。Crystal Report 支持大多数流行的开发语言,可以方便的在任何应用程序中添加报表。
        不论是IT行业的站点管理员,还是金融业、电信业的数据库管理员,Crystal Report 都堪称是一个功能强大的工具,它可以帮助每个人对数据进行分析和解析。
 具体来说,Crystal Report的功能有以下几点:
 **全面的数据库访问:
  Crystal Report 中包括了超过35中数据源驱动,可以访问一种XML、企业和关系型数据库。
 **广泛的设计格式与设计:
  通过Crystal Report,用户可以将数据库转换为高度交互性内容。可以从100多中格式选项中进行选择、包括参数、映射、
  交叉表和超级链接、用以强化报表的冲击力。
 **强大的图表设计功能:
  Crystal Report 可以在报表中包含多彩的、易读的图表(提供了非常丰富的报表类型,如:条形图、折线图、面积图、
  饼图、干特图、股票图等)。
 **灵活的应用集成技术:
  Crystal Report 带有灵活的Java、COM和.NET SDK,以及可内嵌的Report Application Server,可将报表与企业Web应用
  紧密地集成在一起。通过使用Crystal Report 的“零”客户端浏览器控制,能够为最终端拥护提供丰富的报表交互、创建
  和修改功能。
 **强大的报表导出:
  Crystal Reprort 的所有的报表都可以导出多种不同的格式:包括XML、PDF、HTML、和Microsoft Excel。
 
     Crystal Report 设计器的布局
 **字段资源管理器:
  列出该报表所有的字段,如:使用的数据库字段、参数字段、公式字段等。可以在此修改和删除字段对象。
 **主报表窗口:
  用来在报表窗口中显示主报表。对于包含子报表的报表,有主报表窗口和对每个的深化(通过双击)的子报表有一个子报
  表窗口。可以通过右击报表窗口的任何空白位置来启动报表快捷菜单。
 **水晶报表主工具栏:
  包括记录选择、分类和文本对象格式化图标。可以对整个工具栏移动或改变大小。
 **水晶报表插入工具栏:
  可以插入汇总字段、组、子报表、图表和图片的图标。也可以在Crystal Report工具栏中单击鼠标来选择“插入”。
    
                               Crystal Report 的具体实例
    **Crystal Report viewer(水晶报表查看器)
 
  Crystal Report Viewer是在Visual Studio.NET中Windows 应用程序来访问和查看水晶报表的Windows窗体控件。类似其
  他的Windows 窗体控件,增加Windows 窗体查看器可以非常方便的从Visual Studio.NET工具箱中拖动水晶报表查看器控件到Windows窗体设计试图。之后再指定水晶报表查看器中的水晶报表。
 ***一个使用Crysatl Report Viewer创建报表的Demo:
  要在 Visual Basic 或 C# 项目中向 Windows 窗体添加 Windows 窗体 Viewer,请执行下列操作:
  打开“工具箱”,并将一个 CrystalReportViewer 拖到窗体上。
  通过拖放操作将 Windows 窗体查看器调整到希望的大小并将其移动到所需位置。
  当运行应用程序时,报表将显示在查看器中。
  与“工具箱”中的任何其他控件一样,如果想向 Windows 窗体查看器控件添加代码,请双击该控件以显示“代码”视图。
  接下来,将报表绑定到 Windows 窗体查看器。
  具体关于本Demo,我在Wiki上写了有关如何操作的一篇非常详细的文章,建议大家去看看。
 
         **ReportDocument对象简介:
       Crystal Reports 对象模型的顶级是 ReportDocument 对象。ReportDocument 包含与报表对接及自定义报表所需的所有 属性和方法。您既可使用其 Load 方法打开报表文件,也可为其分配一个强类型报表。
  要使用 ReportDocument,您首先必须引用 CrystalDecisions.CrystalReports.Engine 命名空间 (可在 CrystalDecisions.CrystalReports.Engine.dll 中找到)。如果您已将报表插入应用程序中,则会自动添加此引用。
 
 ***一个具体使用ReportDocument对象创建动态加载报表的Demo:
 
  向 CrystalDecisions.CrystalReports.Engine 添加引用
  在代码编辑器中打开 Form1.cs。
  在Form1窗体上添加一个Button.
  向 Form1.cs 添加下列命名空间:
  using CrystalDecisions.CrystalReports.Engine;
  创建一个报表对象,作为 Form1() 中的公共 ReportDocument 变量:
  public ReportDocument oRpt=null;
  在函数 button1_Click() 中,使用“报表文档”对象加载 MyReport.rpt,并将该对象绑定到 Windows 窗体查看器:
              private void button1_Click(object sender, System.EventArgs e)
              {
                   rpt=new ReportDocument();
                   rpt.Load("..\\..\\MyReport.rpt");
                   crystalReportViewer1.ReportSource=rpt;
              }

 
 
      **使用DataSet创建主从表报表的Demo:
  在报表中,有许多表是主从结构,比如:订单与订单细节,每个订单是一个“订单”表中的一条记录,而其细节是另个一  个“订单 细节”表中的多条记录,两个表通过一个字段"订单ID"关联起来,这种报表可利用其分组功能实现,下面对其进行具体的介绍。
 
  在From1.cs上添加“CrystalReportViewer”控件。
  在“解决方案资源管理器”中,右击项目,指向“添加”,选择“数据集”,单击确定。
  在“服务器资源管理”器中,添加连接,本示例使用"Crystal Report for .NET"中的示例数据库Xtreme.mdb,默认的安装
  目录在
  “F:Program Files\Microsoft Visual Studio.net\Crystal Reports\Samples\Database\chs”下,单击确定。
  将“订单”表和“订单细节”表拖到”DataSet“中。
  新建一个Crystal Report文件,起名为"MyReport".
  使用报表专家,在”项目数据“中选择”ADO。NET数据集“,插入”订单“和”订单明细“表,在字段选择器上选择要在报表上
  显示的数据
  字段。有两个字段是必须的({客户.客户ID}和{产品细节.产品ID})。在”组“选项卡中选择分组依据为”订单“表的”订单ID“。
  单击”完成“。
  回到Form1.cs下进行编码。
  在Form1的命名空间的开始地方输入:
  using System.Data.OleDb;
  在Form1的类定义开始地方输入:
  private MyReport report=null;
  在Form1_Load()中输入:
   report=new MyReport();
   Dataset1 dataSet=new Dataset1();
   OleDbConnection conn=new OleDbConnection
    ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\\Visual Studio.net\\Crystal Reports\\Samples\\Database\\chs\\Xtreme.mdb");
   OleDbDataAdapter oleAdapter=new OleDbDataAdapter("SELECT * FROM 订单",conn);
   oleAdapter.Fill(dataSet,"订单");
   OleDbDataAdapter oleDetailsAdapter=new OleDbDataAdapter("SELECT * FROM 订单细节",conn);
   oleDetailsAdapter.Fill(dataSet,"定单细节");
   report.SetDataSource(dataSet);
   crystalReportViewer1.ReportSource=report;
  产生两个OleDbDataAdapter类的对象,并分别使用填充Fill方法可以连接到被指定的数据库获取数据。
 
 
 
 
 **图表: 
  Crystal Reports 使您可以在报表中包含复杂的、多彩的图表。绘制图表不仅是一种表示数据的方法,也是一种分析工具。
 用户可以在图表或图表的图例上深化以获取详细信息。
 
  可以根据以下内容绘制图表:
   摘要和小计字段
   详细信息、公式和运行总和字段
   交叉表摘要
 
  **如何在报表中插入图表的具体步骤:
   在 Report Designer 中右击,指向“插入”,并单击“图表”。
  在“类型”选项卡中,选择图表类型。
  如果希望“图表专家”使用“坐标轴”和“选项”选项卡上的默认选项,请选择“自动设置图表选项”。
  单击“数据”选项卡。
  在“位置”区域,指定图表在报表中出现的频率,然后单击“页眉”或“页脚”指定放置图表的位置。
  在“布局”区域,选择图表布局。
  在“数据”区域,指定要作为条件使用的数据库字段。
  如果“坐标轴”和“选项”选项卡出现,则可以自定义某些图表属性,如轴的缩放比例、图例和数据点。
  单击“文本”选项卡。接受默认标题信息或将新标题添加到图表。
  单击“确定”按钮。
 
 **使用公式
  公式概述:
   在许多情况下,报表所需的数据以存在与数据库表字段中。例如:若要准备一份订单列表,应将适当的字段放置在表内。
  但是,有时需要在报表中放置不存在与任何数据字段中的数据。在这种情况下,便需要创建公式。例如:若要计算处理每
  份订单所需花费的天数,则需要一个可确定的订购日期和发货日期之间天数的公式。利用Crystal Report可以轻松地创建
  此类公式。
 
  使用“公式编辑器”创建和编辑公式。
   当通过右击“字段资源管理器”中的“公式字段”并选择“新建”来编辑现有的公式字段或创建新的公式字段时,
  出现该对话框。在为公式命名之后即会出现该对话框。

  **子报表:
  子报表是报表中的报表。使用子报表,可以幌喙氐谋ū砗喜⒌揭桓霰ū碇小?梢孕鞅疚薹唇拥氖荩蛘咴诘ジ?BR> 报表中显示相同数据的不同视图。
  创建子报表的过程与创建常规报表的过程相似。字报表有报表大多数的特性,包括他自己的记录选择条件。子报表月报表之间
 唯一的区别是子报表:
  * 是作为对象插入到主报表中,它不能独立存在(但可以将子报表另存为主报表)。
  * 可以放置在报表的任何一节内,整个子报表将在该节中打印。
  * 子报表中不能包含另一个子报表。
 
 **如何创建子报表的具体步骤:
   在 Report Designer 中右击,指向“插入”,单击“子报表”。
   将子报表对象拖动到报表上。
   选择项目中的一个报表、另一个现有报表或为子报表创建一个新报表。
   选择“按需要显示子报表”以便能够在需要时检索子报表上的数据。否则,所有子报表数据将与报表一起出现。
    注意   使用按需要显示子报表将提高包含子报表的报表的性能。
   如果需要将子报表链接到主报表中的数据上,请单击“链接”选项卡。
   从“可用字段”列表中选择要在主(包含)报表中用作链接字段的字段。
   使用“字段链接”部分(只有在选定了链接字段后才会出现)为每个链接字段设置链接:
   从“使用的子报表参数字段”中选择要链接到主报表的字段;
   选择“基于字段选择数据”复选框,并从相邻的下拉列表中选择字段,以便基于特定的字段组织子报表数据(这相当于快速使用“选择专家”
   )。如果没有在这里指定字段,子报表将采用主报表的结构。
   单击“确定”按钮。