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

在 Visual Studio 2010 中使用 Crystal Reports 生成报告

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.88/5 (155投票s)

2011年3月12日

CPOL

11分钟阅读

viewsIcon

1705317

downloadIcon

82168

报告制作简单。

一直以来,Visual Basic 和 Visual Studio 都集成了 Crystal Report。人们说这可以追溯到 1993 年。但在 VS2010 中,他们却将 Crystal Reports 排除在外了。是的,你没听错,Crystal Report 已从 Visual Studio 2010 中移除。但别担心,你可以从 SAP 网站单独下载。这些是我从互联网上找到的信息。

'事实证明,Crystal Reports for Visual Studio 2010 将单独发布,而不是随产品一起提供。最重要的是,Crystal Reports for Visual Studio 2010 将继续免费提供,无需注册。'

从这个 链接 下载 Crystal report,或者直接将下面的链接粘贴到你的地址栏,它会提示你保存一个 EXE 文件。

引言

我在网上搜索 2010 年的 Crystal Reports,在 2005 年找到了,但找不到任何针对 2010 年的特别教程。所以我想,让我冒一次险,为像我这样从未接触过 Crystal Reports 的初学者写一篇教程。

在这篇文章中,我将通过截图向你展示一个简单的报告创建过程。我一直相信,图文并茂的文章胜过千言万语,所以我总是倾向于使用截图。

让我们从在 VS2010 中创建一个新网站开始。请看下图

Crstalreportusingvs2010/rsz_1figure_1.jpg

图 1

根据图 1,在 VS2010 中创建一个新网站,并根据你的喜好命名。现在我来展示数据库表的结构。

Crstalreportusingvs2010/Figure_2.JPG

图 2

上图显示了数据库表的结构。而下图(图 3)将展示表中一些示例数据

Crstalreportusingvs2010/Figure_3.JPG

图 3

如果你想直接运行这个示例项目,那么你可以从顶部的链接下载数据库脚本。

现在我们需要创建一个 xsd 文件作为空白数据源,因为我们将使用强类型数据。我将把这个教程分为 5 个子部分,如下所述:

  • 使用 Crystal Reporting Tool 的简单报告
  • 分组报告
  • 图表报告
  • 子报告
  • 交叉表报告

使用 Crystal Report 的简单报告

下图展示了创建 XSD 文件的过程。

要添加 XSD 文件,请点击解决方案资源管理器 -> 右键单击项目 -> 点击添加新项,然后就会显示下图。

Crstalreportusingvs2010/Figure_4.JPG

图 4

点击确定按钮,它会提示你确认是否将该文件放在 App_Code 文件夹中。只需点击确定,该文件就会在屏幕上以空白页面的形式打开。

现在我们将向该 XSD 文件添加一个空白数据表。只需右键单击文件并选择 **添加 -> 数据表**。它会在屏幕上添加一个 DataTable1。图 5 展示了如何向 XSD 文件添加数据表。

Crstalreportusingvs2010/Figure_5.JPG

图 5

现在 datatable1 已添加到 XSD 文件中。现在,我们将根据图 6 向 datatable1 添加数据列。请记住,我们在这里添加的任何字段(列)都可以在报告中显示。所以请逐一添加你想要在报告中显示的列。

Crstalreportusingvs2010/Figure_6.JPG

图 6

请记住,为数据列命名的确切名称要与数据库中的名称相同,并且也要选择与数据库相同的数据类型,否则你会遇到字段和数据类型不匹配的错误。

一旦我们将所有必需的列添加到数据表中,就设置 datacolumn 的属性,使其与数据库中的相同。下图将展示如何设置数据列的属性。这里所有列的默认数据类型都是 string,所以如果 datatype 不是 string,则需要手动更改。

只需右键单击 datatable 中的 datacolumn,然后选择属性。在属性窗口中,从该 datacolumnDataType 下拉列表 中选择合适的数据类型。

Crstalreportusingvs2010/Figure_7.JPG

图 7

就这样。XSD 文件的创建已经完成。现在我们将开始创建 Crystal report 设计。

只需点击解决方案资源管理器 -> 右键单击项目名称并选择 Crystal reports。根据你的喜好命名,然后点击添加按钮。

图 8 将向你展示 Crystal reports 的创建过程。

Crstalreportusingvs2010/Figure_8.JPG

图 8

点击添加按钮,一个 .rpt 文件将被添加到解决方案中。同时,它会询问报告创建类型,即你希望如何创建报告。图 9 将显示截图。

Crstalreportusingvs2010/Figure_9.JPG

图 9

只需点击确定按钮继续。它将引导你到图 10。

Crstalreportusingvs2010/Figure_10.JPG

图 10

在项目数据下,展开 **ADO.NET 数据集**,然后选择 DataTable1,并使用 **>** 按钮将其添加到右侧的“选定表”部分。

现在点击完成按钮,它将显示下一个屏幕(图 11)。

Crstalreportusingvs2010/rsz_figure_11.jpg

图 11

报告文件添加后,你可以在服务器资源管理器旁边的左侧看到**字段资源管理器**。

展开**数据库字段**,在其下你应该能找到我们之前创建的数据表。只需展开它,然后将字段一个接一个地从字段资源管理器拖到 rpt 文件中的**详细信息部分**。

现在报告设计部分已完成。现在我们需要从数据库中获取数据,并将数据绑定到数据集,然后将该数据集绑定到报告查看器。

让我们一步一步来。

首先,根据下图,将一个 CrystalReportViewer 控件从工具箱拖放到 aspx 页面上。

Crstalreportusingvs2010/Figure_12.JPG

图 12

现在我们将获取数据,将数据传递给数据集,然后将该数据集添加到 Crystal Report。下面的 C# 代码将完成这项工作。

using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

下面的代码是报告的最终代码。

protected void Page_Load(object sender, EventArgs e)
{
    ReportDocument rptDoc = new ReportDocument();
    dsSample ds = new dsSample(); // .xsd file name
    DataTable dt = new DataTable();

    // Just set the name of data table
    dt.TableName = "Crystal Report Example";
    dt = getAllOrders(); //This function is located below this function
    ds.Tables[0].Merge(dt);

    // Your .rpt file path will be below
    rptDoc.Load(Server.MapPath("../Reports/SimpleReports.rpt"));

    //set dataset to the report viewer.
    rptDoc.SetDataSource(ds);
    CrystalReportViewer1.ReportSource = rptDoc;
}

public DataTable getAllOrders()
{
    //Connection string replace 'databaseservername' with your db server name
    string     sqlCon = "User ID=sa;PWD=sa; server=databaseservername;INITIAL CATALOG=SampleDB;" +
                        "PERSISTSECURITY INFO=FALSE;Connect Timeout=0";
    SqlConnection Con = new SqlConnection(sqlCon);
    SqlCommand    cmd = new SqlCommand();
    DataSet ds = null;
    SqlDataAdapter adapter;
    try
    {
        Con.Open();
        //Stored procedure calling. It is already in sample db.
        cmd.CommandText = "getAllOrders";
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Connection = Con;
        ds = new DataSet();
        adapter = new SqlDataAdapter(cmd);
        adapter.Fill(ds, "Users");
    }
    catch (Exception ex)
    {
        throw new Exception(ex.Message);
    }
    finally
    {
        cmd.Dispose();
        if (Con.State != ConnectionState.Closed)
            Con.Close();
    }
    return ds.Tables[0];
}

现在,保存所有内容并运行报告。它看起来应该像下图。

Crstalreportusingvs2010/Figure_13.JPG

图 13

Crystal Report 中的分组

在这里,我们只关注报告设计,其余部分请参考**第 1 部分**。在这里,我们将按 CustomerProductOrderQuantity 进行分组。详情请参考图 14。

只需向解决方案中添加一个报告(.rpt)文件。从弹出窗口中选择适当的 dataset。完成后,选择分组选项,如图 14 所示。

Crstalreportusingvs2010/Figure_14.jpg
图 14

现在,右键单击报告,选择 **报告 -> 分组向导**,生成的窗口将如图 15 所示。

Crstalreportusingvs2010/Figure_15.jpg
图 15

现在我们想按 **Customer Name** 和 **Product name** 进行分组,所以先将 Customer 添加到右侧面板。然后将 product name 添加到右侧面板,如图 16 所示。

Crstalreportusingvs2010/Figure_16.jpg

图 16

这次 Crystal report 的设计将与上次不同。请看图 17。

GroupHeaderSection1GroupHeaderSection2 已添加到报告设计器中。这里的 Group #1 Name 指的是 Customer Name,Group #2 Name 指的是 Product Name。

如果你想在组页脚中添加一些内容,下面也会添加 GroupFooterSection1GroupFooterSection2

Crstalreportusingvs2010/Figure_17.jpg

图 17

现在,在每个组下,我们想显示每个客户和产品的订单数量,为此,我们必须在 GroupFooterSection2 中添加汇总。请参考图 18。

Crstalreportusingvs2010/Figure_18.jpg

图 18

右键单击 GroupFooterSection,选择 **插入 -> 汇总**。它会显示下一个屏幕(图 19)。我还在详细信息(第 3 部分)中添加了 Order_IDProduct_Qty 字段。

Crstalreportusingvs2010/Figure_19.jpg

图 19

在汇总窗口中,在第一个下拉列表中选择你想要汇总的列。

在计算下拉列表中选择“求和”(第一个选项)。

汇总位置已设置为报告页脚。所以只需点击确定即可将该汇总字段放置到报告中。

默认情况下,汇总字段会添加到报告页脚部分。如果你想按产品分组,请将其移至 groupFooterSection2;如果你想按客户分组,请将其移至 GroupFooterSection1;如果你想对所有订购的产品求和,则将其保留在原始位置。我将其移至 FooterSection1,因此它将显示客户总数量。请参考图 20。

Crstalreportusingvs2010/Figure_20.jpg

图 20

现在保存报告并最终运行它。它看起来应该像图 21。

Crstalreportusingvs2010/Figure_21.jpg

图 21

Crystal Report 中的图表

图表是报告工具中最重要和最可见的部分。Crystal 具有添加图表到报告的强大功能。让我们看看如何在 CR 中添加图表。在这里,我们也只关注图表的设计,其他内容请参考**第 1 部分**。

在这里,我们将显示客户订购产品的数量图表。X 部分将显示 Customer 名称,Y 部分将显示 customer 的订购总量。

首先将图表添加到报告设计中。

右键单击 .rpt 文件并选择 **插入 -> 图表**。请参考图 22。

Crstalreportusingvs2010/Figure_22.jpg

图 22

添加图表到报告后,报告文件中不会立即显示图表,但通过鼠标指针可以看到一个空白矩形在移动。所以只需点击报告页眉。它会打开一个关于图表样式和其他选项的弹出窗口。请参考图 23。

Crstalreportusingvs2010/Figure_23.jpg
图 23

现在,从类型选项卡中,从左侧选择图表类型,如条形图、折线图、饼图等。从右侧窗格中选择子类型,如**并排图**、**百分比条形图**等。我不再详细介绍。我留给你练习。

如果你想将图表样式垂直或水平显示,还可以从下面的部分选择垂直或水平单选按钮。如果需要图表的阴影效果,请勾选 **使用深度效果** 复选框。请参考图 23。

Crstalreportusingvs2010/Figure_24.jpg

图 24

根据图 24,切换到下一个数据选项卡。有三个框:可用字段、更改时和显示值。因此,将 Customer Name 从可用字段移动到“更改时”框,并将 Product Quantity 字段移动到“显示值”框,然后点击确定。

现在,你可以在报告页眉部分看到添加的图表,如图 25 所示。

Crstalreportusingvs2010/Figure_25.jpg

图 25

现在,只需保存报告并运行它。你将在屏幕上看到一个图表报告。

报告中的报告(子报告)

Crystal reports 提供报告中的报告功能,通常称为子报告功能。

我将详细解释一下。在这里,我们也只设计子报告的设计。其他内容请参考**第 1 部分**。

向解决方案中添加新报告。然后添加 **报告 -> 分组**,并只选择 Customer 名称,因为我们想为每个 customer 设计报告,并且子报告按产品分组。因此,在 Customer group 页眉中将只有一个分组页眉,如图 26 所示。

Crstalreportusingvs2010/Figure_26.jpg

图 26

现在右键单击详细信息部分并选择 **插入 -> 子报告**。请参考图 27。

Crstalreportusingvs2010/Figure_27.jpg

图 27

添加子报告后,它会显示如图 28 所示的屏幕。

Crstalreportusingvs2010/Figure_28.jpg

图 28

根据图 28,默认情况下,选择的是**在项目中选择 Crystal Report**。如果你想从项目中添加报告,则选择此项;否则,请选择**使用报告向导创建子报告**。一旦我们选择使用报告向导创建子报告(第 3 个单选按钮),我们就必须点击报告向导按钮来选择报告类型和数据源,就像**第 1 部分**一样。然后点击确定按钮,就像图表报告一样,它会显示一个鼠标指针周围移动的矩形,点击你想要显示子报告的详细信息部分。

现在要编辑子报告,请参考图 29。

Crstalreportusingvs2010/Figure_29.jpg

图 29

点击编辑子报告选项,并根据你的需要格式化报告。在这里,我建议添加产品名称和产品数量,或者你也可以为子报告添加图表。当你点击子报告按钮时,它会打开子报告设计器,实际上 CR 会创建一个单独的 .rpt 文件,但它会隐藏在主 .rpt 文件中,所以我们看不到它。

现在运行报告,你就可以看到结果了,报告中的报告,如图 30 所示。

Crstalreportusingvs2010/Figure_30.jpg

图 30

这里的数字 1 是主报告,数字 2 是子报告,它显示标题为“产品明细”。

Crystal Report 中的交叉表报告

首先,让我明确什么是交叉表报告。通常,我们按行生成报告,例如,我们先显示客户名称,然后按产品显示,等等。但如果我们想按列显示报告,例如,将产品名称显示为报告的列,那么交叉表报告就派上用场了。请看图 31 中交叉表报告的结果。

Crstalreportusingvs2010/Figure_31.jpg

图 31

在这里,我们也只展示如何设计交叉表报告,其他内容请参考**第 1 部分**。

首先,向解决方案中添加 .rpt 文件。然后,根据下图(参考图 32)将交叉报告添加到报告页眉部分。

请记住,我们只能在报告页眉或报告页脚部分添加交叉表报告。

Crstalreportusingvs2010/Figure_32.jpg

图 32

点击交叉表报告选项后,它会显示鼠标指针周围的移动矩形,只需将其放置在报告页眉部分。

当我们点击页眉部分时,它会引导我们到图 33。

Crstalreportusingvs2010/Figure_33.jpg

图 33

根据图示,将 Customer 名称字段移至“行”部分,我们想将 Product 名称显示为“列”,所以将其移至“列”字段,我们想显示 product 总数,所以将其移至“汇总字段”。就是这样。只需运行报告,你就可以看到如图 31 所示的输出。

就是这么简单。如果你对上述任何类型的报告有任何疑问,请通过评论告诉我。我会尽力满足你的要求。

让我们享受报告吧!

文章来源:DotNet Stuff  

© . All rights reserved.