【问题标题】:The subreport repeats itself in Detail band子报表在详细信息带中重复
【发布时间】:2016-05-18 07:18:55
【问题描述】:

我是 JasperReports 的新手,基本上我想将子报表放在主报表中

问题是我将子报表放在详细信息带中,因此当我查询具有多个数据的数据库时,当我将报表输出为 pdf 时,子报表总是会重复多次。我想要一份无论我连接的数据库中有多少数据都不会重复的报告

我已经在网上搜索了,解决方法是添加

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

在子报表的 print when expression 属性中,这确实解决了我的部分问题,因为现在我的子报表只打印一次但它仍然离开显示我的子报表后的一些空白页

所以我认为它仍在重复,但由于我添加的表达式而不会打印数据,人们说细节带的性质应该以这种方式工作,我不应该把子报表在细节带,但如果我把它放在其他带我得到这个错误:

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

如果我有很多数据,可能会占用一页以上的数据,就会发生上述错误。

如何删除那些空白页?如果我被要求不把它放在细节带中,那我该怎么办?或者有什么解决办法?

【问题讨论】:

  • 1) 在迭代主数据源的过程中,Detail带中的每条记录都会重复; 2) 您应该了解更多关于 JasperReports 的信息。指南JasperReports Ultimate Guide 是一个好的开始; 3)有很多关于JasperReports的帖子。例如这篇文章对你有用:Subreport overflowed on a band that does not support overflow
  • 谢谢您的建议,但我想我知道细节带在从 db 迭代期间重复,这就是为什么我问是否有解决方案可以解决它,我也知道溢出问题之一是由于您给我一个链接的大数据,我没有问为什么会发生错误我问有什么解决方案,谢谢你给我一个 300 多页的指南,我希望得到答案,如果真的没有,那么也许可以解释原因。我实际上并不认为我问了一个可怕的问题,但无论如何谢谢,我会花时间阅读指南。
  • ))) 好的,我认为,最好发布您所拥有的图像和一些 jrxml 示例来重现问题
  • 当然您也可以将子报告添加到 Detail 波段 - 这是法律行为。这取决于您解决的任务

标签: jasper-reports subreport


【解决方案1】:

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

如果您想将子报表保留在 Detail 带中,这很正常,您可以执行以下操作之一:

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

如果您可以将子报表移出详细信息带区,请将其放置在允许溢出的带区中,例如标题或摘要带区。那么:

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

【讨论】:

  • 由于您的第一个解决方案,我已经解决了我的问题。我的报告重复了 x 次,因为我的主数据集查询返回了 x 量的数据,我更改了我的主报告的 sql 查询,因此它返回了一条数据记录,就像你说的那样,详细信息带出现了一次。我的子报表完全一样,所以最后我唯一做的就是更改我的主报表中的查询以返回一条记录,结果就是我想要的,就像一个魅力一样,非常感谢。您的其他方法也解释得很好,我也很乐意尝试,非常感谢!
  • 我已经尝试了第二种方法,它也有效,好处是我不必强迫自己为主查询集想出一个虚拟查询,缺点可能是什么你说哪个是性能,如果性能不是我现在感觉不太差(还没有太多数据),也许这个解决方案也不错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多