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

使用 Crystal Reports 的分组、图表、交叉表和子报表功能分步创建 Crystal Report

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.85/5 (109投票s)

2011年1月6日

CPOL

9分钟阅读

viewsIcon

720254

downloadIcon

23424

本文将帮助初学者轻松使用 Crystal Reports 的功能。

引言

本文将帮助您创建报告。我将提供一个简单的分步说明来创建报告。我在这里介绍了 Crystal Reports 的功能,如分组、图表、交叉表、子报表等。

我将解释以下 5 个功能

  1. 简单的 Crystal Report
  2. Crystal Report 中的分组
  3. Crystal Report 中的图表
  4. Crystal Report 中的交叉表
  5. Crystal Report 中的子报表

Using the Code

让我们开始创建一个新的 ASP.NET Web 站点。图 1 显示了初始的 Web 站点创建屏幕。

fig1.PNG

图 1

单击“确定”按钮后,您将在解决方案资源管理器中看到已创建的项目。 现在,让我们开始使用 Crystal Report

在此之前,我将展示我的表结构和表中的数据。这将帮助您轻松理解步骤。图 2 将显示表结构,图 3 将显示表中的数据。

fig2.PNG

图 2

fig3.PNG

图 3

但是,在附加的项目中,我将从 XML 文件中获取数据。我已经将表中的所有数据保存到 XML 中。因此,您可以轻松使用附加的项目。接下来是 Dataset (xsd 文件) 的创建。

有多种方法可以将数据传递给 Crystal Report。在这里,我使用 Dataset (xsd 文件) 来绑定 Crystal Report。在我看来,这是最好的绑定方式。因此,下一步是 Dataset (xsd 文件) 的创建。

转到解决方案资源管理器 -> 右键单击项目 -> 添加新项。图 4 显示了 Dataset 的创建。

fig4.PNG

图 4

单击“添加”按钮后,会弹出一个确认消息。只需单击“是”。现在,您将在 Visual Studio 中看到 dsTestCrystal.xsd 数据集文件已打开。在这里,您需要创建一个数据表,其中包含要在 Crystal Report 中显示的所有列名。要创建数据表,请参见下面的图 5。

fig5.PNG

图 5

现在您可以在 Dataset 中看到已创建的数据表。接下来,我们需要添加要在 Crystal Report 中显示的列名。请注意,此数据表的列名和数据类型应与数据库中的表相同。如果您遇到任何 数据类型属性不匹配 错误,请考虑是这个问题。要创建列名,请参见下面的图 6。

fig6.PNG

图 6

逐一添加所有列并设置正确的数据类型。在这里,默认情况下,数据类型为 string。如果任何列具有不同的数据类型,我们需要手动更改。在此项目中,我将‘Marks’列的数据类型设置为 int。要更改数据类型,请参见下面的图 7。

fig7.PNG

图 7

Dataset (dsTestCrystal.xsd) 的创建已完成。现在我们需要设计 Crystal Report

1. 简单的 Crystal Report

转到解决方案资源管理器 -> 右键单击项目 -> 添加新项。图 8 显示了 Dataset 的创建。

fig8.PNG

图 8

单击“添加”按钮后,将出现 Crystal Report Gallery 窗口。在其中,选择“使用报表向导”复选框,然后单击“确定”按钮。现在您将看到下面的图 9。

fig9.PNG

图 9

现在展开 ADO.NET Datasets 文件夹。在那里,您可以看到我们创建的 Dataset (dsTestCrystal)。在 dsTestCrystal 下,您可以看到我们创建的数据表。因此,选择此数据表,然后单击箭头按钮将其移至“选定的表”列表框,如下图 10 所示。

fig90.PNG

图 10

只需单击“完成”按钮。现在您可以在 Visual Studio 中看到 Crystal Report 已打开。在左侧,您可以看到“字段资源管理器”。如果看不到,请转到菜单Crystal Reports -> Field Explorer。字段资源管理器视图显示在下面的图 11 中。

fig91.PNG

图 11

现在,您可以将 字段资源管理器 中的列拖放到 Crystal Report 的“详细信息部分”。您可以在下一张图 12 中看到 Crystal Report 的最终视图。

fig92.PNG

图 12

Crystal Report 的设计也已完成。现在我们需要将数据传递给 Dataset (dsTestCrystal),然后需要将此 Dataset 设置给 Crystal Report。

现在,创建一个 aspx 页面。在 .aspx 页面中添加以下代码。

<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server"
DisplayGroupTree="False"  />   

然后,在 .aspx.vb 页面中编写以下代码以生成 Crystal report。

Dim rptDoc As New ReportDocument
Dim ds As New dsTestCrystal
Dim sqlCon As SqlConnection
Dim dt As New DataTable
dt.TableName = "Crystal Report Example"
sqlCon = New SqlConnection("server='servername';
Initial Catalog='databasename';user id='userid';password='password'")
Dim da As New SqlDataAdapter("select Stud_Name, Class, 
Subject, Marks from stud_details", sqlCon)
da.Fill(dt)
ds.Tables(0).Merge(dt)
rptDoc.Load(Server.MapPath("SimpleCrystal.rpt"))
rptDoc.SetDataSource(ds)
CrystalReportViewer1.ReportSource = rptDoc 

现在运行您的页面,数据将生成在 Crystal Report 中。

2. 使用分组的 Crystal Report

这里我只解释 Crystal Report 的设计。其余内容您可以参考前面的内容。

我将使用类似 Class -> Name -> Subject & Marks 的分组。这里 Class 和 Name 是分组。Subject 和 Marks 将在详细信息部分中显示。要创建分组,请参见下面的图 13 和 14。

fig93.PNG

图 13

fig94.PNG

图 14

Class 是主分组。因此,我们首先需要通过单击箭头按钮将 Class 字段移至 Group By 列表框。然后,我们需要移动 Stud_Name 字段。请参见下面的图 15。

fig95.PNG

图 15

现在单击“确定”按钮,看看 Crystal Report 的区别。您可以看到添加了两个 Header 和 Footer,以及两个字段 Group #1 Name, Group #2 NameGroup #1 Name 是 Class,Group #2 NameStud_name。请参见下面的图 16。

fig96.PNG

图 16

现在,您可以将 字段资源管理器 中的列拖放到 Crystal Report 的“详细信息部分”。您可以在下一张图 17 中看到 Crystal Report 的最终视图。

fig97.PNG

图 17

现在我要添加学生的总分。在 Stud_Name GroupFooterSection 中,我们需要添加此总和。请参见下面的图 18。

fig98.PNG

图 18

单击“Summary”后,您将看到下面的图 19。

fig99.PNG

图 19

我们需要 Marks 列的总和。因此,从第一个组合框中选择 Marks 字段。然后从第二个组合框中选择 Sum。最后,我们需要计算每个学生的总分数。因此,我们需要从第三个组合框中选择 Stud_Name 分组。然后单击“确定”按钮。现在您可以在 Stus_Name 的页脚部分看到已添加的总分字段。请参见下面的图 20 中的 Crystal Report 最终视图。

fig100.PNG

图 20

3. Crystal Report 中的图表

这里,我也将只解释图表的设计。其余步骤与第一个相同。

我将按学生显示学生的总分数。X 轴是学生姓名Y 轴是总分数。让我们开始创建图表。请参见下面的图 21。

fig101.PNG

图 21

单击图表后,您将看到下面的图 22。在这里,您可以看到许多图表格式。所以您可以从中选择任何一个。我从选项中选择“Bar”(条形图)。

fig102.PNG

图 22

现在转到第二个选项卡,即 Data。请参见下面的图 23。

fig103.PNG

图 23

如前所述,我们将 Stud_Name 用于 X 轴。因此,我们需要将 Stud_Name 移至第一个 (on change of) 列表框。然后将 Marks 移至第二个列表框 (Show value(s))。默认情况下,Sum 会显示在那里。如果您想将 Sum 更改为其他内容,可以通过单击 Set Summary Operation 按钮进行更改。然后单击“确定”按钮。您将在 Report Header 部分看到已创建的图表。请参见下面的图 24 中的 Crystal Report 最终视图。

fig104.PNG

图 24

现在运行网站并查看图表。就是这样。完成了。

4. Crystal Report 中的交叉表

这里,我也只解释报表的设计。其余步骤与第一个相同。

首先,您需要知道为什么要使用交叉表。如果您想按列显示科目,就需要使用交叉表。因为不同班级的科目可能会有所不同,所以无法设计具有固定列的报表。因此,在这种情况下,我们可以使用交叉表。请参见下面的图 25 中的交叉表报表创建。

注意:交叉表只能放置在报表页眉/页脚中。

fig105.PNG

图 25

单击交叉表后,您将看到矩形鼠标指针。因此,您只能将其放置在报表页眉/页脚中。放置后,您将看到下面的图 26。

fig106.PNG

图 26

如前所述,我们将按列放置科目。因此,将 Subject 字段移至 Columns listbox。然后,在显示每个科目的分数之前,我们需要显示学生姓名。因此,将 Stud_Name 移至 Rows listbox。最后,将 Marks 移至 Summarized Fields 列表框。然后单击“确定”按钮。您将在报表页眉/页脚部分看到已创建的报表。请参见下面的图 27 中的交叉表报表的最终视图。

fig107.PNG

图 27

现在运行网站并查看报表。就是这样。完成了。

5. Crystal Report 中的子报表

这里,我也只解释报表的设计。其余步骤与第一个相同。

在这里,我将使用子报表按每个学生显示图表。因此,要使用子报表,我将首先创建学生组页眉。请参见下面的图 28。

fig108.PNG

图 28

然后在组页眉部分,我们需要创建子报表。为此,请遵循下面的图 29。

fig109.PNG

图 29

然后将鼠标放在组页眉部分。放置鼠标光标后,会弹出一个窗口。请参见下面的图 30。

fig110.PNG

图 30

在这里,勾选第三个复选框以创建新的子报表。然后键入子报表的名称。然后单击“报表向导”按钮来选择数据集。像下面的图 31 一样选择数据集。

fig90.PNG

图 31

然后单击“完成”按钮,然后在子报表窗口中单击“确定”按钮。现在遵循下面的图 32 来编辑子报表。

fig111.PNG

图 32

现在您将看到下面的图 33。在这里,您可以使用第 3 部分 (图表创建) 来创建图表。在这里,使用 Subject 作为 X 轴,Marks 作为 Y 轴。请参见下面的图 33。

fig112.PNG

图 33

现在运行网站并查看报表。就是这样。完成了。

我希望本文对您有所帮助。

© . All rights reserved.