Bootstrap

报表生成器FastReport .Net用户指南:如何创建数据源关系

FastReport .Net是一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案,使用FastReport .NET可以创建独立于应用程序的.NET报表,同时FastReport .Net支持中文、英语等14种语言,可以让你的产品保证真正的国际性。

FastReport.NET官方版下载(qun:585577353)icon-default.png?t=N7T8https://www.evget.com/product/1861/download

两个数据源之间可以设置关系。关系用于定义 "master-detail"关系。例如,"Categories "表中的一条记录可以在 "Products "表中有多个条目:

fastreport

要创建关系,您需要说明以下内容:

  • Parent table;
  • Child table;
  • 父表中关键列的集合;
  • 子表中关键列的集合。

我们以演示数据库中的 "Categories "表和 "Products "表为例进行说明。它们的结构如下

fastreport

两个表都有 CategoryID 字段,可以在该字段上设置关系。因此,一个类别可能包含多个产品。

如何在 FastReport 中使用相关数据源?有两种方法。

第一种方法可以建立 "master-detail "类型的报告。为此,需要使用两个 "Data "带。主数据带连接到主数据源,详细数据带连接到详细数据源。我们的示例如下:

fastreport

如果运行这样的报告,就会打印出每个类别的产品清单:

fastreport

第二种方法允许从详细数据源引用主数据源。我们将举例说明。假设我们要打印所有产品的列表。为此,我们需要一个与 "Products "表相连的 "Data "带:

fastreport

这样的报告将打印所有类别的所有产品。比方说,我们想在每个产品旁边打印它所属的类别名称。如果不使用关系,这将更加困难。我们所知道的产品类别就是它的 id(由 "Products "表中的 "CategoryID "列表示)。我们要打印的类别名称存储在 "Category "表的 "CategoryName "列中。借助关系,我们可以按以下方式引用类别名称:

[Products.Categories.CategoryName]

对于 "Products"表的当前行,FastReport 将在 "类别 "表中找到相应的父行,并返回 "CategoryName "列的值。

在一般情况下,引用父表字段的方式允许表祖先的数量不受限制:

fastreport

如果我们将上图所示的列拖入报告中,就会得到一个包含文本的 "Text "对象:

fastreport

如果我们运行它,就会看到以下内容:

fastreport

创建关系

要创建关系,请单击 "Data "窗口中的 "Actions "按钮,然后选择 "New relation... "项。您将看到关系编辑器:

fastreport

首先,需要选择父表和子表。然后,在窗口下部选择相关数据列。可以通过一个或多个数据列将表关联起来。列设置完成后,按 "确定 "按钮关闭关系编辑器。

在 "Data "窗口中,选择子数据源并打开列列表,就可以看到创建的关系。在这些列中,可以看到与父数据源的关系:

fastreport

父数据源的数据列可以通过拖放方法插入到报表中。因此,如果我们选择如图所示的列,并将其拖到报告页面上,就会得到一个内容如下的 "Text"对象:

[Products.Categories.CategoryName]
编辑关系

要编辑关系,请打开子数据源的列列表,找到需要的关系并点击工具栏上的 "Eidt..."按钮。这将调用我们之前看过的关系编辑器。

系统变量

有一系列系统变量可在报告中使用:

VariableDescription
Date报告开始的日期和时间。
Page当前页码。
TotalPages报告的总页数。要使用此变量,需要启用报告的双通道。您可以在 "报告
PageN表格中的页码:"Page N"。
PageNofM表格页码:"Page N of M"。
Row#组内数据行号。该值在新组开始时重置。
AbsRow#数据行的绝对数。该值在新组开始时不会重置。
Page#当前页码。如果将多个准备好的报告合并到一个数据包中,该变量将返回数据包中的当前页码。该变量实际上是一个宏,当在预览窗口中查看组件时,它的值将被替换。这意味着不能在表达式中使用它。
TotalPages#报告的总页数。如果将多个准备好的报告合并为一个数据包,该变量将返回一个数据包的页数。该变量实际上是一个宏。该变量实际上是一个宏,当在预览窗口中查看组件时,它的值将被替换。这意味着你不能在表达式中使用它。
HierarchyLevel层次结构报告中的当前层次结构级别(请参阅 "打印层次结构")。顶层等于 1。
HierarchyRow#层次结构报告中的完整行号,如 "1.2.1"。
;