3

我正在使用 iReport 4.0.2,我想在我的主报告中显示结果。例如,在我的主报告中,我们有两列,我想得到这两列的总和,就像这种格式:

A      B     sum
10     5      15

其中 A 是主报表中的一个字段,B 是我的子报表的返回值。这很好用。但是,关键是有时子报表不会返回任何值,这就是问题所在。在这种情况下,sum 的结果是这样的:

A       B      sum
10             NULL

正如我们在这里看到的, B 是子报表返回值,但它的值既不是 NULL 也不是 0 。这就是我们有这个问题的原因。

我试图找到当 SQL 没有返回结果时如何从子报表中获取返回值。我知道 iReport 有一个名为“无数据时”的属性,但它没有帮助。所以我想知道,我们是否有另一种方法来解决 iReport 中的问题或使用一些 SQL 技巧。

4

2 回答 2

2

我认为在您的第二个示例中,B 实际上为 null,但您的文本字段可能设置了 'Blank When Null' 属性。除了 B 的空白之外,我能够重现您的结果。

真正的问题是您不能使用空值进行加法或减法。JasperReports 只会打印空值。如果表达式中的变量之一为空,您必须添加一些逻辑来提供默认值。例如

$F{MAIN_REPORT_FIELD} - ($V{SUB_RESULT} == null ? 0 : $V{SUB_RESULT})

不幸的是,这对于在 JasperReports 4.0.2 (案例 0005138 )中使用 Groovy 表达式的报告来说是错误的,并且将始终返回 null。

你有几个选择:

  1. 您可以升级到解决此问题的 JasperReports/iReport 4.1.1。
  2. 您可以切换到使用 Java 进行表达式。

    根据您的报告,这要么是无痛的,要么是一件苦差事。必须修复任何没有正确表达式类的字段,并且您可能必须在对非原始/包装类型执行操作的任何表达式中更加明确。

于 2011-09-19T14:53:47.797 回答
0
  1. 如果您在主报表中对主字段和子报表字段进行求和,那么在求和表达式中 (主报表字段 + (subreportfield==null ? 0 : subreportfield) 。

  2. 将子报表值返回给主报表变量。

然后做主报告字段和裸端口返回变量的总和。

执行与上述相同的条件。

于 2012-01-05T08:41:19.220 回答