FastReport .Net是一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案,使用FastReport .NET可以创建独立于应用程序的.NET报表,同时FastReport .Net支持中文、英语等14种语言,可以让你的产品保证真正的国际性。
FastReport.NET官方版下载(qun:585577353)https://www.evget.com/product/1861/download
两个数据源之间可以设置关系。关系用于定义 "master-detail"关系。例如,"Categories "表中的一条记录可以在 "Products "表中有多个条目:
要创建关系,您需要说明以下内容:
- Parent table;
- Child table;
- 父表中关键列的集合;
- 子表中关键列的集合。
我们以演示数据库中的 "Categories "表和 "Products "表为例进行说明。它们的结构如下
两个表都有 CategoryID 字段,可以在该字段上设置关系。因此,一个类别可能包含多个产品。
如何在 FastReport 中使用相关数据源?有两种方法。
第一种方法可以建立 "master-detail "类型的报告。为此,需要使用两个 "Data "带。主数据带连接到主数据源,详细数据带连接到详细数据源。我们的示例如下:
如果运行这样的报告,就会打印出每个类别的产品清单:
第二种方法允许从详细数据源引用主数据源。我们将举例说明。假设我们要打印所有产品的列表。为此,我们需要一个与 "Products "表相连的 "Data "带:
这样的报告将打印所有类别的所有产品。比方说,我们想在每个产品旁边打印它所属的类别名称。如果不使用关系,这将更加困难。我们所知道的产品类别就是它的 id(由 "Products "表中的 "CategoryID "列表示)。我们要打印的类别名称存储在 "Category "表的 "CategoryName "列中。借助关系,我们可以按以下方式引用类别名称:
[Products.Categories.CategoryName]
对于 "Products"表的当前行,FastReport 将在 "类别 "表中找到相应的父行,并返回 "CategoryName "列的值。
在一般情况下,引用父表字段的方式允许表祖先的数量不受限制:
如果我们将上图所示的列拖入报告中,就会得到一个包含文本的 "Text "对象:
如果我们运行它,就会看到以下内容:
创建关系
要创建关系,请单击 "Data "窗口中的 "Actions "按钮,然后选择 "New relation... "项。您将看到关系编辑器:
首先,需要选择父表和子表。然后,在窗口下部选择相关数据列。可以通过一个或多个数据列将表关联起来。列设置完成后,按 "确定 "按钮关闭关系编辑器。
在 "Data "窗口中,选择子数据源并打开列列表,就可以看到创建的关系。在这些列中,可以看到与父数据源的关系:
父数据源的数据列可以通过拖放方法插入到报表中。因此,如果我们选择如图所示的列,并将其拖到报告页面上,就会得到一个内容如下的 "Text"对象:
[Products.Categories.CategoryName]
编辑关系
要编辑关系,请打开子数据源的列列表,找到需要的关系并点击工具栏上的 "Eidt..."按钮。这将调用我们之前看过的关系编辑器。
系统变量
有一系列系统变量可在报告中使用:
Variable | Description |
---|---|
Date | 报告开始的日期和时间。 |
Page | 当前页码。 |
TotalPages | 报告的总页数。要使用此变量,需要启用报告的双通道。您可以在 "报告 |
PageN | 表格中的页码:"Page N"。 |
PageNofM | 表格页码:"Page N of M"。 |
Row# | 组内数据行号。该值在新组开始时重置。 |
AbsRow# | 数据行的绝对数。该值在新组开始时不会重置。 |
Page# | 当前页码。如果将多个准备好的报告合并到一个数据包中,该变量将返回数据包中的当前页码。该变量实际上是一个宏,当在预览窗口中查看组件时,它的值将被替换。这意味着不能在表达式中使用它。 |
TotalPages# | 报告的总页数。如果将多个准备好的报告合并为一个数据包,该变量将返回一个数据包的页数。该变量实际上是一个宏。该变量实际上是一个宏,当在预览窗口中查看组件时,它的值将被替换。这意味着你不能在表达式中使用它。 |
HierarchyLevel | 层次结构报告中的当前层次结构级别(请参阅 "打印层次结构")。顶层等于 1。 |
HierarchyRow# | 层次结构报告中的完整行号,如 "1.2.1"。 |