示例 3.交互式
在本例中,我们将看到如何通过单击 "Matrix "对象的单元格来创建详细报告。例如,我们将使用一个矩阵来显示按年份分组的员工销售额。
矩阵的数据源是 "MatrixDemo "表。该表显示了按年和月分组的员工销售额:
Name | Year | Month | ItemsSold | Revenue |
---|---|---|---|---|
Nancy Davolio | 1999 | 2 | 1 | 1000 |
Nancy Davolio | 1999 | 11 | 1 | 1100 |
Nancy Davolio | 1999 | 12 | 1 | 1200 |
Nancy Davolio | 2000 | 1 | 1 | 1300 |
Nancy Davolio | 2000 | 2 | 2 | 1400 |
Nancy Davolio | 2001 | 2 | 2 | 1500 |
Nancy Davolio | 2001 | 3 | 2 | 1600 |
Nancy Davolio | 2002 | 1 | 2 | 1700 |
Andrew Fuller | 2002 | 1 | 2 | 1800 |
Andrew Fuller | 1999 | 10 | 2 | 1900 |
Andrew Fuller | 1999 | 11 | 2 | 2000 |
Andrew Fuller | 2000 | 2 | 2 | 2100 |
Janet Leverling | 1999 | 10 | 3 | 3000 |
Janet Leverling | 1999 | 11 | 3 | 3100 |
Janet Leverling | 2000 | 3 | 3 | 3200 |
Steven Buchanan | 2001 | 1 | 3 | 4000 |
Steven Buchanan | 2001 | 2 | 4 | 4100 |
Steven Buchanan | 2000 | 1 | 4 | 3999 |
- 将 "MatrixDemo.Year "数据列放在列头;
- 将 "MatrixDemo.Name "数据列放在行标题中;
- 将 "MatrixDemo.Revenue "数据列放在单元格中。
如图所示,单元格的值是员工全年销售额的总和。让我们创建一个详细报告,点击单元格后就会显示该报告。在我们的例子中,详细报告可以包含所选员工在所选年度每个月的销售额。
如何将单元格与打印数据连接起来?矩阵的每个单元格都有自己的地址。这是来自列标题和行标题的值的组合。在我们的示例中,单元格的地址是雇员年份和姓名的组合。这些数据可以准确地传递到详细报告中。如何做到这一点呢?非常简单:设置超链接,只显示报告名称和参数名称。参数值无需标明:对于矩阵单元格,FastReport 本身会形成值并将其传递到参数中。
假设我们点击了左上角包含数字 3900 的单元格。这是名为 "Andrew Fuller "的员工 1999 年的销售额总和。使用什么表格将此值传入参数?FastReport 使用分隔符合并列和行的值:
这是否意味着我们必须从这个字符串中提取年份值和员工姓名,将年份转换为 int,然后使用这些值进行数据筛选?不,这要简单得多。我们只需创建一个具有嵌套参数的参数。你可以在 "数据 "一章中了解到这一点。在本例中,父参数可以是这样的1999;Andrew Fuller
创建参数时,请考虑以下时刻:
- 不需要设置父参数。只需给它命名即可;
- 父参数的嵌套参数数量必须与矩阵传递的值数量相同。在本例中,有两个值;
- 嵌套参数的顺序必须与矩阵传递值的顺序一致。在本例中,年份将在第一个参数中传递,雇员姓名将在第二个参数中传递;
- 嵌套参数可以随意命名,但最好与矩阵元素名称一致;
- 正确设置每个嵌套参数的数据类型非常重要。数据类型必须与传入参数的值一致。在我们的例子中,第一个参数(年份)必须是整数类型,第二个参数(员工姓名)必须是字符串类型。
在超链接配置中,将父参数指定为报告参数(在我们的示例中为 "SelectedCell"):
FastReport 将这些值传入 SelectedCell.Year 和 SelectedCell.Name 嵌套参数。这些值将转换为参数配置中指定的数据类型,因此正确配置参数数据类型非常重要。
详细报告位于主报告的单独页面上,使用相同的数据源:
为了显示所选员工在所选年份的销售额,请设置筛选条件。为此,请打开 "Data"带编辑器,并输入以下筛选条件:
报告已准备就绪。运行报告并点击左上角的单元格。将打开一份详细报告,其中包含以下数据:[MatrixDemo.Year] == [SelectedCell.Year] && [MatrixDemo.Name] == [SelectedCell.Name]
如图所示,数值之和(1900+2000)与我们点击的矩阵单元格相对应。