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






4.85/5 (109投票s)
本文将帮助初学者轻松使用 Crystal Reports 的功能。
引言
本文将帮助您创建报告。我将提供一个简单的分步说明来创建报告。我在这里介绍了 Crystal Reports 的功能,如分组、图表、交叉表、子报表等。
我将解释以下 5 个功能
- 简单的 Crystal Report
- Crystal Report 中的分组
- Crystal Report 中的图表
- Crystal Report 中的交叉表
- Crystal Report 中的子报表
Using the Code
让我们开始创建一个新的 ASP.NET Web 站点。图 1 显示了初始的 Web 站点创建屏幕。
单击“确定”按钮后,您将在解决方案资源管理器中看到已创建的项目。 现在,让我们开始使用 Crystal Report。
在此之前,我将展示我的表结构和表中的数据。这将帮助您轻松理解步骤。图 2 将显示表结构,图 3 将显示表中的数据。
但是,在附加的项目中,我将从 XML 文件中获取数据。我已经将表中的所有数据保存到 XML 中。因此,您可以轻松使用附加的项目。接下来是 Dataset
(xsd 文件) 的创建。
有多种方法可以将数据传递给 Crystal Report。在这里,我使用 Dataset
(xsd 文件) 来绑定 Crystal Report。在我看来,这是最好的绑定方式。因此,下一步是 Dataset
(xsd 文件) 的创建。
转到解决方案资源管理器 -> 右键单击项目 -> 添加新项。图 4 显示了 Dataset 的创建。
单击“添加”按钮后,会弹出一个确认消息。只需单击“是”。现在,您将在 Visual Studio 中看到 dsTestCrystal.xsd 数据集文件已打开。在这里,您需要创建一个数据表,其中包含要在 Crystal Report 中显示的所有列名。要创建数据表,请参见下面的图 5。
现在您可以在 Dataset
中看到已创建的数据表。接下来,我们需要添加要在 Crystal Report 中显示的列名。请注意,此数据表的列名和数据类型应与数据库中的表相同。如果您遇到任何 数据类型属性不匹配 错误,请考虑是这个问题。要创建列名,请参见下面的图 6。
逐一添加所有列并设置正确的数据类型。在这里,默认情况下,数据类型为 string
。如果任何列具有不同的数据类型,我们需要手动更改。在此项目中,我将‘Marks’列的数据类型设置为 int
。要更改数据类型,请参见下面的图 7。
Dataset
(dsTestCrystal.xsd) 的创建已完成。现在我们需要设计 Crystal Report。
1. 简单的 Crystal Report
转到解决方案资源管理器 -> 右键单击项目 -> 添加新项。图 8 显示了 Dataset 的创建。
单击“添加”按钮后,将出现 Crystal Report Gallery 窗口。在其中,选择“使用报表向导”复选框,然后单击“确定”按钮。现在您将看到下面的图 9。
现在展开 ADO.NET Datasets 文件夹。在那里,您可以看到我们创建的 Dataset
(dsTestCrystal
)。在 dsTestCrystal 下,您可以看到我们创建的数据表。因此,选择此数据表,然后单击箭头按钮将其移至“选定的表”列表框,如下图 10 所示。
只需单击“完成”按钮。现在您可以在 Visual Studio 中看到 Crystal Report 已打开。在左侧,您可以看到“字段资源管理器”。如果看不到,请转到菜单Crystal Reports -> Field Explorer。字段资源管理器视图显示在下面的图 11 中。
现在,您可以将 字段资源管理器 中的列拖放到 Crystal Report 的“详细信息部分”。您可以在下一张图 12 中看到 Crystal Report 的最终视图。
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。
Class 是主分组。因此,我们首先需要通过单击箭头按钮将 Class 字段移至 Group By 列表框。然后,我们需要移动 Stud_Name 字段。请参见下面的图 15。

现在单击“确定”按钮,看看 Crystal Report 的区别。您可以看到添加了两个 Header 和 Footer,以及两个字段 Group #1 Name, Group #2 Name。Group #1 Name 是 Class,Group #2 Name 是 Stud_name
。请参见下面的图 16。
现在,您可以将 字段资源管理器 中的列拖放到 Crystal Report 的“详细信息部分”。您可以在下一张图 17 中看到 Crystal Report 的最终视图。
现在我要添加学生的总分。在 Stud_Name
GroupFooterSection 中,我们需要添加此总和。请参见下面的图 18。
单击“Summary”后,您将看到下面的图 19。
我们需要 Marks 列的总和。因此,从第一个组合框中选择 Marks 字段。然后从第二个组合框中选择 Sum。最后,我们需要计算每个学生的总分数。因此,我们需要从第三个组合框中选择 Stud_Name
分组。然后单击“确定”按钮。现在您可以在 Stus_Name
的页脚部分看到已添加的总分字段。请参见下面的图 20 中的 Crystal Report 最终视图。
3. Crystal Report 中的图表
这里,我也将只解释图表的设计。其余步骤与第一个相同。
我将按学生显示学生的总分数。X 轴是学生姓名,Y 轴是总分数。让我们开始创建图表。请参见下面的图 21。
单击图表后,您将看到下面的图 22。在这里,您可以看到许多图表格式。所以您可以从中选择任何一个。我从选项中选择“Bar”(条形图)。
现在转到第二个选项卡,即 Data。请参见下面的图 23。
如前所述,我们将 Stud_Name
用于 X 轴。因此,我们需要将 Stud_Name
移至第一个 (on change of) 列表框。然后将 Marks 移至第二个列表框 (Show value(s))。默认情况下,Sum 会显示在那里。如果您想将 Sum 更改为其他内容,可以通过单击 Set Summary Operation 按钮进行更改。然后单击“确定”按钮。您将在 Report Header 部分看到已创建的图表。请参见下面的图 24 中的 Crystal Report 最终视图。
现在运行网站并查看图表。就是这样。完成了。
4. Crystal Report 中的交叉表
这里,我也只解释报表的设计。其余步骤与第一个相同。
首先,您需要知道为什么要使用交叉表。如果您想按列显示科目,就需要使用交叉表。因为不同班级的科目可能会有所不同,所以无法设计具有固定列的报表。因此,在这种情况下,我们可以使用交叉表。请参见下面的图 25 中的交叉表报表创建。
注意:交叉表只能放置在报表页眉/页脚中。
单击交叉表后,您将看到矩形鼠标指针。因此,您只能将其放置在报表页眉/页脚中。放置后,您将看到下面的图 26。
如前所述,我们将按列放置科目。因此,将 Subject 字段移至 Columns listbox
。然后,在显示每个科目的分数之前,我们需要显示学生姓名。因此,将 Stud_Name
移至 Rows listbox
。最后,将 Marks 移至 Summarized Fields 列表框。然后单击“确定”按钮。您将在报表页眉/页脚部分看到已创建的报表。请参见下面的图 27 中的交叉表报表的最终视图。
现在运行网站并查看报表。就是这样。完成了。
5. Crystal Report 中的子报表
这里,我也只解释报表的设计。其余步骤与第一个相同。
在这里,我将使用子报表按每个学生显示图表。因此,要使用子报表,我将首先创建学生组页眉。请参见下面的图 28。
然后在组页眉部分,我们需要创建子报表。为此,请遵循下面的图 29。
然后将鼠标放在组页眉部分。放置鼠标光标后,会弹出一个窗口。请参见下面的图 30。
在这里,勾选第三个复选框以创建新的子报表。然后键入子报表的名称。然后单击“报表向导”按钮来选择数据集。像下面的图 31 一样选择数据集。
然后单击“完成”按钮,然后在子报表窗口中单击“确定”按钮。现在遵循下面的图 32 来编辑子报表。
现在您将看到下面的图 33。在这里,您可以使用第 3 部分 (图表创建) 来创建图表。在这里,使用 Subject 作为 X 轴,Marks 作为 Y 轴。请参见下面的图 33。
现在运行网站并查看报表。就是这样。完成了。
我希望本文对您有所帮助。