jasper报告中的多个组

问题描述 投票:6回答:4

我想在ireport中创建多个组,并且数据应该以组的方式显示,例如:首先Group1的数据应该被完全打印,然后。


Group1.模块数据


在这之后,我想完全打印Group2数据

第2组。


类别数据

我使用的是结果集数据源。

谁能帮帮我?

jasper-reports report ireport
4个回答
4
投票

只要你的查询结果排序正确,Jasper报表就会完全以这种方式工作。

例如,假设你是通过一个叫做 "MY_GROUP "的字段进行分组,它的值是 "GROUP A "和 "GROUP B"。 在您的报表中,您将为字段 "MY_GROUP "创建一个组。 在你的查询中,确保你的ORDER BY子句中的第一个字段是MY_GROUP。 您也可以在iReports中通过添加 "MY_GROUP "字段作为报表查询的排序选项部分的第一个字段来实现这一目标。

现在,您已经添加了您的组,并正确地排序,您的结果将像这样出来。

标题 - GROUP ADetail - GROUP AFooter - GROUP A标题 - GROUP BDetail - GROUP BFooter - GROUP B。

完全如你所愿。 我的猜测是你没有正确地对查询结果进行排序。 这可能会导致GROUP A、GROUP B等多个分组都穿插在一起。


2
投票

如果iReport中的分组不能把所有数据放在一起,就使用子报表。当Jasper到了一个子报表时,它会运行整个子报表,并把整个子报表放到报表中。你可以有这样的东西。

Subreport 1 - Group 1 Group 1第一条记录 Group 1第二条记录 Group 1第三条记录 ... 第1组最后的记录Subreport 2 - 第2组 第2组第一记录 第2组第二记录 第2组第三记录 ...。 第2组 第三次记录


2
投票

这和Tom说的一模一样。Jasper报表组并不对从查询中检索到的数据进行排序,它们只是按照数据来的顺序取用。

为了以组的方式显示信息,你必须在查询中添加一个ORDER BY,这样报表接收到的行就已经排序了。


0
投票

所以,当你使用多个组头时,会发生一个问题。第1个头的行为和预期的一样,只有在唯一值上按Column Value A排序。第二个标题使用Column Value B,尽管是非唯一值,但会打印在每一行上。

  1. 理论上,您应该能够 使用ORDER BY:
ORDER BY ValueA, ValueB

假设你使用的是sql, plsql等等,才能正确显示报告。然而,在我的情况下,这并没有发生,尽管对其他人来说,它似乎工作。

  1. 使用子报表 以通过独特的报告附加小的差异。您可以创建一个根报告,其中包含空的细节。然后,您创建Unique报告作为子报告。最后,你使用subreport元素将值链接到根报告中。虽然这是个很好的工作,可能会造成代码重复。
  2. 我使用的一个黑客方法是。"Print When Expressions "和逻辑布尔表达式的混合体... 2个组头和一个列头。 布尔表达式。
$F{QUERY}.equals(Query1) && ($P{P_Typequery}.equalsIgnoreCase("QueryA") && $P{P_parameter} == null) 

$F{QUERY}.equals(Query1) && ($P{P_Typequery}.equalsIgnoreCase("P_QueryA") && $P{P_parameter} != null) 

有两个组头和一个列头。列头不会为每一行重复打印,所以你可以为它的 "打印时 "指定一个布尔运算表达式,这样它就不会总是打印。第一个组头不会为每一行重复,所以可以使用。第2个组头用于你想让它为每一行重复的时候,因为它总是为每一行打印,你可以在它的 "打印时 "使用另一个布尔值。希望对你有帮助

© www.soinside.com 2019 - 2024. All rights reserved.