子报告在Detail band中重复出现

时间:2016-05-18 07:18:56

标签: jasper-reports subreport

我是JasperReports的新手,基本上我想在主报道中放一个子报告

问题是我将子报告放在Detail band中,所以当我查询具有多个数据的数据库时,当我将报告输出到pdf时,子报告将总是重复多次。我想要一个不会重复的报告,无论我连接的数据库中有多少数据

我搜索了互联网,解决方案是添加

new Boolean($V{REPORT_COUNT}.intValue()==1)

打印时,子报表的表达式 属性,由于现在我的子报表只打印一次但仍然离开,这确实解决了我的问题的一部分显示我的子报表后的一些空白页

所以我认为它仍然在重复,但由于我添加了表达式而没有打印数据,人们说细节带的性质应该是这样的,我不应该这样做。 ; t将子报表放在详细信息区域中,但是如果我把它放在其他一些波段中,我会收到此错误:

Error filling print... Subreport overflowed on a band that does not support overflow.

如果我有大量数据可能占用超过一页的数据,则会发生上述错误。

如何删除这些空白页?如果我要求不把它放在一个详细的乐队中那么我该怎么办?或者有什么解决方案?

1 个答案:

答案 0 :(得分:7)

详细信息带的生成次数将与主数据集中的记录数一样多(由顶级查询填充)。

如果您想将子报表保留在详细信息区域中,顺便说一下,您可以执行以下操作之一:

  • 要么具有仅返回一条记录的虚拟查询,那么详细信息带只会生成一次。然后,将报表连接传递给子报表。你可能已经这样做了。这样,您就可以独立于主报表运行查询。
  • 或按原样保留报告,并将printWhen表达式($V{REPORT_COUNT}.intValue()==1)直接添加到详细信息区域,而不是在子报表上。请注意,这只是一个可能影响报告性能的丑陋黑客。您的主要查询仍然会返回大量您不会使用的数据,因此您应该考虑其他选项。

如果您可以将子报告移出Detail带,请将其放在允许溢出的带中,如Title或Summary band。然后:

  • 让您的主数据集查询为空,以便不生成详细信息带
  • 设置whenNoDataType =&#34; AllSectionsNoDetail&#34;在报告级别(在<jasperReport>标记中),以便除了详细信息之外的所有其他部分生成
  • 与上面的第一个选项完全相同,将报表连接传递给子报表并从那里开始工作