在报告的详细信息区域中添加其他行

时间:2012-12-18 16:46:55

标签: jasper-reports ireport

我正在处理 JR 报告并使用 iReport 生成它们。

我正在寻找此任务的解决方案: Detail 乐队必须有六条记录。例如,查询从数据库中获取3条记录,然后细节带将有3行,但我想将3个剩余行打印为空行。

如何使用 iReport 进行操作?

3 个答案:

答案 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)

第一行字段的位置应位于摘要带的最顶部,以便字段看起来就像它们是详细信息部分的一部分。