我正在处理 JR 报告并使用 iReport 生成它们。
我正在寻找此任务的解决方案: Detail 乐队必须有六条记录。例如,查询从数据库中获取3条记录,然后细节带将有3行,但我想将3个剩余行打印为空行。
如何使用 iReport 进行操作?
答案 0 :(得分:2)
我能想到的最好的方法是让你的查询返回6行(或你的行数#),然后jasper就不需要做任何与众不同的事了。
以下是一个如何使用oracle 10或更高版本执行此操作的示例 - 我确信有更好的方法可以执行此操作。
with gen_6
-- creates a table of 6 rows (generate series)
as (SELECT LEVEL as row_num
FROM dual
CONNECT BY LEVEL <= 6),
Your_Query as
-- your query here <BR>
(select SYSDATE, ROWNUM as row_num from dual where rownum <=6)<BR>
-- your query here <BR>
(select SYSDATE, ROWNUM as row_num from dual where rownum <=6)<BR>
FYI
您甚至不需要将“字段”row_num添加到报表中以使其正常工作。
答案 1 :(得分:0)
最简单的方法:您只需在详细信息区域中包含N个文本字段即可复制数据源中的记录数或对所需数字进行硬编码。
示例:
Detail Band
----------------
| FIELD_X
| FIELD_X
----------------
在这种情况下,您将从DB收到3条记录,并将打印6个值。
另一个选项:使用您需要的规则创建两个子报表,并将其包含在详细信息页面上,然后将其包含在其他行中。
示例:
Detail Band
----------------
| SUBREPORT_1
| SUBREPORT_2
----------------
在这种情况下,您将从DB收到3条记录,并在每个子报表中打印3个值,因此在第二个子报表中,您可以将行保留为空白或任何其他规则。
业务范例: 此方法可用于需要为特定信用卡或借记卡分配不同帐户的财务界面。
答案 2 :(得分:0)
将查询结果限制为6,然后按常规执行,将字段放入详细信息区
然后,在摘要中,创建三行字段。
1 | || || || |
2 | || || || |
3 | || || || |
在第一行所有字段的Print When Expression
new Boolean($V{REPORT_COUNT}.intValue() == 3 || $V{REPORT_COUNT}.intValue() == 4 || $V{REPORT_COUNT}.intValue() == 5)
在第二行所有字段的Print When Expression
new Boolean($V{REPORT_COUNT}.intValue() == 3 || $V{REPORT_COUNT}.intValue() == 4)
在第三行所有字段的Print When Expression
new Boolean($V{REPORT_COUNT}.intValue() == 3)
第一行字段的位置应位于摘要带的最顶部,以便字段看起来就像它们是详细信息部分的一部分。