65.9K
CodeProject 正在变化。 阅读更多。
Home

使用Crystal Reports报告XML数据

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.04/5 (13投票s)

2007年9月26日

CPOL

9分钟阅读

viewsIcon

140176

本文将向您展示如何使用 Crystal Reports 和 Windows Forms 客户端报告 XML 数据。

概述

本文将向您展示如何使用 Crystal Reports 和 Windows Forms 客户端报告 XML 数据。

图:1 – 运行时模式示例

引言

使用 Crystal Reports (CR) 报告 MS Access、SQL Server 和 Oracle 等数据源很常见。那么 XML 作为数据源呢?嗯,您可能想知道如何做到这一点。这甚至可能吗?好吧,在这篇文章的帮助下,我将向您展示如何使用 XML 数据源并使用 Crystal Reports 对其进行报告。

我假设读者对 Visual Studio (VS) 2005 IDE 和 Crystal Reports 有基本的了解。您还应该能够熟练使用 C# 编写代码。对 XML 架构和 ADO.NET 有基本的了解是最好不过的。

什么是 XML 数据?

在查看演示之前,让我们了解什么是 XML 数据!简单来说,XML 代表可扩展标记语言。它是 W3C 的一项倡议,旨在允许交换人类和计算机都易于理解的信息。以 XML 格式存储的信息可以在跨平台场景中工作。例如,如果您的信息采用 XML 格式,那么在 UNIX 和 Windows 平台之间共享就很容易。XML 文件中的数据以用户定义的标签呈现。以下是我在此演示中使用的示例 XML 文件中的部分列表

<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>

如您所见,每个 <CD> 标签都相当于一个包含与 CD 相关信息的行。此外,每个列都唯一地标识为一个标签。您可以从此处了解更多关于 XML 的信息:https://w3schools.org.cn/xml/xml_whatis.asp。好的,让我们开始我们的演示,看看使用 Crystal Reports 和 Windows Forms 报告 XML 数据是多么容易。

步骤 1:让我们创建一个 Windows 应用程序项目

如果 VS 2005 IDE 尚未启动,您可以通过单击 Windows“开始”按钮 ->“所有程序”->“Microsoft Visual Studio 2005”,然后单击“Microsoft Visual Studio 2005”图标来启动 IDE。您可能有其他方法来启动 IDE,例如单击桌面快捷方式等等。

请执行以下步骤来创建一个 Windows 应用程序项目

  1. 单击菜单“文件”->“新建”->“项目…”,或者您可以按快捷键 Ctrl + Shift + N(请参见图 2)。
  2. 从“新建项目”对话框中,选择 Visual C# -> Windows
  3. 从“模板”中,选择 Windows 应用程序
  4. 请给应用程序命名;我将项目命名为“XMLCRReport”。您可以根据自己的偏好选择不同的位置来存储应用程序文件。请参见图 2,了解命名过程的说明。
  5. 单击“确定”按钮完成此过程。VS 2005 将创建一个新项目并默认添加 Form1

图:2 – 创建新 Windows 应用程序项目的过程

让我们根据表 1 设置 Form1 的属性。如果属性工具箱在 IDE 中不可见,您可以按 F4 键使其可见。在使用属性工具箱更改属性之前,请确保选择 Form1

表 1. Form1 的属性
属性
文本 使用Crystal Reports报告XML数据
大小 700,300

步骤 2:让我们将 CrystalReportViewer 添加到 Form1

我们需要 Crystal Report Viewer (CRV) 控件来向用户显示报告。报告查看器为您的报告注入生命。它不仅可以预览输出,还可以让您以各种流行格式(PDF、Excel 等)生成信息。您还可以在查看输出时打印报告的硬拷贝。

您可以按如下方式将 CrystalReportViewer 添加到 Form1

  1. 确保 Form1 当前在设计器中打开。
  2. 将“工具箱”->“CrystalReports”->“CrystalReportViewer”拖放到 Form1 上。此步骤将创建一个名为 crystalReportViewer1CrystalReportViewer 新实例。您可以随意命名它;我将使用默认名称。

完成步骤 1 和步骤 2 后,您的项目应类似于图 3。

图:3 – 添加 CRV 后 Form1 设计器表面

步骤 3:向项目添加数据集

尽管有不同的方法可以将数据获取到 CrystalReportViewer,我将在这里向您展示 DataSet 技术。让我们继续向项目添加一个 DataSet。将 DataSet 添加到项目需要以下步骤

从解决方案资源管理器中选择“添加”->“新建项”->“DataSet”。将名称从 DataSet1 更改为 dsCDCatalog,然后单击“添加”按钮。请取消 TableAdapter 配置向导;我们将使用 DataSet 设计器添加 DataTable

让我们将 DataTable 添加到我们新创建的 DataSetDataTable 对于加载报告数据至关重要;我们将在设计报告时使用来自 DataSet/DataTable 的信息。将 DataTable 添加到 DataSet (dsCDCatalog) 需要以下步骤

双击解决方案资源管理器中的 dsCDCatalog;它将打开设计器视图。右键单击设计器表面并选择“添加”->“DataTable”。单击标题并将其名称更改为 dtCDCatalog(参见图 4)。

图:4 – 将 DataTable 添加到 DataSet

让我们开始向 DataTable (dtCDCatalog) 添加列。您的设计器屏幕应如图 5 所示。右键单击 dtEmployee 并选择“添加”->“列”以开始向 DataTable 添加列。

图:5 – 向 DataTable 添加列

重复以下列的操作

  • 标题 (String)
  • 艺术家 (String)
  • 国家/地区 (String)
  • 公司 (String)
  • 价格 (Double)
  • 年份 (String)

当您添加列时,它们默认将是 String 数据类型。选择一列后,转到“属性”窗口将其从 String 更改为 Int32。添加完所有列后,它应类似于图 6。

图:6 – 添加所需列后的 DataTable

步骤 4:向项目添加报告

到目前为止,我们已经创建了项目,并添加了 CrystalReportViewerDataSet。现在是时候处理报告了。以下是添加报告(rptXMLData.rpt)所需的步骤

从解决方案资源管理器中选择“添加”->“新建项”->“Crystal 报告”。将名称从 CrystalReport1.rpt 更改为 rptXMLData.rpt,然后单击“添加”按钮完成操作。将出现“Crystal Reports Gallery”对话框,选择“作为空白报告”选项,然后单击“确定”按钮完成添加报告的过程。

默认情况下,您将看到 rptXMLData.rpt 在设计器模式及其默认设置中为您打开。对于此示例,我将只使用页面标题和页脚。我将减少报告标题和页脚的高度。通常,完成所有这些操作后,您的报告设计器应类似于图 7。

图:7 – 设计模式下新添加的报告

向项目添加报表很容易,挑战在于填充空白报表布局。无论这是您的第一个报表,还是您像我一样是报表狂热者,我们都必须处理报表编写最基本的构建块;即页眉、详细信息和页脚。

通常,报表是根据特定的页面大小和布局设计的。我们的报表是信纸大小和纵向布局。您可以通过右键单击开放设计器表面(灰色区域)上的任意位置并选择“报表”和“设计属性”来探索附加到报表布局的各种属性。

在开始设计过程之前,最好先在纸上画出报告的原型。如您在图 1 中所见,我们在页眉部分有报告名称和报告日期。正文部分包含员工列表信息;页脚包含页码。

页眉部分

我们的页眉部分由五个文本对象、两个线条对象和一个特殊字段组成。请从“工具箱”->“Crystal Reports”中拖放一个文本对象和线条对象。您可以从“字段资源管理器”->“特殊字段”->“打印日期”中拖放“打印日期”(一个特殊字段)。您还会注意到,在将报告对象放置到设计器表面后,我更改了颜色和字体。请确保您的页眉看起来类似于图 8。

图:8 – 报告页眉和页脚

页脚部分

页脚部分很简单,只有一个特殊字段和一个线条对象。与页眉部分一样,您可以从“工具箱”->“Crystal Reports”添加一个线条对象。同样,您可以从“字段资源管理器”->“特殊字段”->“N/M 页”中拖放“N/M 页”(一个特殊字段)。请参阅图 8 并确保页脚看起来类似。

详细信息部分

报告的详细信息部分将包含 CD 目录列表的详细信息。现在的问题是,我们将从哪里获取数据呢?嗯,如您所知,一开始我们向这个项目添加了一个 DataSet,我们将使用这个 DataSet 作为报告的数据源。

DataSet 添加为报表的数据源很容易。您将从右键单击报表设计器上的任意空白区域 -> 数据库 -> 数据库专家… 开始。此操作的结果将出现一个“数据库专家”对话框。您可以单击“项目数据”并展开“ADO.NET DataSet”节点。请从我们的 DataSet 中选择 dtCDCatalog DataTable,然后单击“>”按钮将其移动到右侧的“选定表”部分(请参见图 9)。

图:9 – 将 DataSet 添加为报告数据源

一旦指定了报告源,我们所要做的就是将 DataTable 中的字段拖放到报告设计器表面上的“详细信息”部分中。您可以将“字段资源管理器”中的“标题”拖放到“详细信息”部分中。

当您将字段拖放到“详细信息”部分时,您会注意到字段的标题也已添加到报表设计器中。由于我们已经处理了字段标题,因此只需删除默认添加的字段标题。请确保最终的报表设计器布局类似于图 10。

图:10 – 最终报表设计布局

尽管报表设计看起来已经完成,但我们尚未处理此报表的层次结构功能。如您在图 1 中所见,所有员工姓名应根据 ManagerID 关联形成层次结构。

步骤 5:C# 接口代码

好的,我们已经得到了报表设计所需的一切。请确保 Form1.cs 后面的 C# 代码如下

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
namespace XMLCRReport 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
        InitializeComponent(); 
    } 
    private void Form1_Load(object sender, EventArgs e) 
    { 
        DataSet dsReport = new dsCDCatalog(); 
        // create temp dataset to read xml information 
        DataSet dsTempReport = new DataSet(); 
        try 
        { 
            // using ReadXml method of DataSet read XML data from books.xml file 
            dsTempReport.ReadXml(@"C:\articles\XmlCrystalReport\cd_catalog.xml"); 
            // copy XML data from temp dataset to our typed data set 
            dsReport.Tables[0].Merge(dsTempReport.Tables[0]); 
            //prepare report for preview 
            rptXMLData rptXMLReport = new rptXMLData(); 
            rptXMLReport.SetDataSource(dsReport.Tables[0]); 
            crystalReportViewer1.DisplayGroupTree = false; 
            crystalReportViewer1.ReportSource = rptXMLReport; 
        } 
        catch (Exception ex) 
        { 
            MessageBox.Show(ex.Message); 
        } 
    } 
} 
}

让我们构建并运行示例

让我们构建项目。如果解决方案中只有一个项目,那么构建项目有几种不同的方法;构建解决方案和项目是相同的。您可以单击主工具箱上的小绿色“播放”按钮,或者按键盘上的 F5 键以在运行时启动应用程序。如果一切顺利,那么您的报表输出应该与图 1 相似。如果您遇到任何问题,我建议您验证所有步骤并重试。

结论

您可以看到使用 Crystal Reports 显示 XML 数据是多么简单。感谢您的阅读;一如既往,我期待您的评论和建议。请随时发送至 asif.blog@gmail.com

© . All rights reserved.