如何指定详细信息带中的行数?

时间:2010-12-16 11:49:15

标签: java jasper-reports ireport

我有两个问题:

1 - 我想指定必须在报告的每个页面中显示的行数。

2 - 如果从数据源获取的行数小于填充页面高度所需的数量,我想用空行填充剩余空间(每行使用其字段边框区分)。例如,如果每页中都显示50行,并且从数据源获取的数据只有20行,然后我想在最后一行打印后打印30行。 考虑到我无法通过更改我的sql select语句来执行此操作。

有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:2)

我遇到了类似的问题,这是我解决这个问题的方法。

首先,您需要一个参数(或可能是变量)和总行数,并且您需要包含变量Group_COUNT,“组”将更改反映您的组的名称。

我有一个名为“IDS”的参数,在查询中使用List<Integer>来获取数据,$P{IDS}.size()给出了行数。我想你也可以使用包含的变量“​​REPORT_COUNT”。

然后,最烦人的部分,你需要使细节带足够长,以容纳所有数据(在我的情况下,8行),并在每一行中插入图像(或文本组件)。此组件需要设置2个属性,“空白时删除行”和“表达时打印”,第一个为true,第二个为以下条件:

new Boolean($P{IDS}.size() < 2 && $P{IDS}.size() == $V{Group_COUNT}.intValue())

您必须将$P{IDS}.size()替换为反映查询行数的表达式,将2替换为行号,假设您至少有1行,则可以跳过#1。从2开始,每行加1,在你的情况下,最多50行! (对不起!)

答案 1 :(得分:2)

我有同样的问题,我的解决方案是获取sql的“空”行(在我的情况下是ORACLE)查询看起来像这样:

Select first_field, second_field, etc..
from my_table WHERE my_condition=${parameter}
UNION ALL
SELECT NULL,NULL, etc..
FROM EXISTING_TABLE_WITH_ROWS WHERE ROWNUM < 40 - (SELECT COUNT(*) FROM my_table WHERE   my_condition = ${parameter})

现在创建上面的空行。 如果您没有看到任何更改,请尝试使用“删除空行时删除行”属性设置一个字段或标签 希望这个帮助

答案 2 :(得分:0)

我可以帮助您解决第二个请求:

  1. 添加具有此相对位置的TextField

    • 左:1像素
    • top:1 pixel
  2. 放入“\ n \ n ...”50次。总是打印50行。

  3. 更改文字大小

    • 宽度:1像素
    • 身高:15像素
  4. 勾选:Strecht溢出时。

  5. 问候