JasperReports:子报告分页

时间:2010-12-02 03:56:43

标签: java jasper-reports ireport

我一直在网上搜索我的问题一周,但我还没有找到它,这是我的问题,我希望这里的任何人都可以帮我解决这个问题。

想象一下,我有以下数据:

Customer
--------
cid : 1 | name: John  ;
cid : 2 | name: Smith ;

PhoneNumber
-----
cid : 1 | number: 1234 ;
cid : 1 | number: 5678 ;
cid : 1 | number: 4321 ;
cid : 2 | number: 6745 ;
cid : 2 | number: 3124 ;

我想使用以下要求在子报表中生成报表:

  • 客户ID - > 'cid'将用作报告参数
  • 报告仅向一位客户显示他/她的电话号码
  • 一个页面必须只显示一个拥有一个电话号码的客户

例如,我从上面的客户详细信息中获取'cid'= 1,它将生成3页,因为姓名为“John”的客户有3个PhoneNumber。

第1页:

客户名称:John - 电话号码:1234

第2页:

客户名称:John - 电话号码:5678

第3页:

客户名称:John - 电话号码:4321

我的问题是:

  1. 如何根据子报告详细信息设置主报告来生成页面?
  2. 我需要在主报表或子报表上设置哪个属性才能满足我的要求?

2 个答案:

答案 0 :(得分:0)

1
您的主报告查询应返回您要显示的电话号码。类似的东西:

select phone_number from ... where cid=$P{CID}

然后在Detail频段中添加子报告,并将字段值($ F {phone_number})作为参数。在子报表中,您可以选择有关此第二个值的更多信息。

2
对于Jasper而言,分页更加棘手并且不那么容易,但有一些解决方法 在我的项目中,我们确保所有乐队都是我们想要的高度。 在您的情况下 - 根据您的喜好创建主报告 - 使用标题等,并计算您需要细节带的高度,这样就需要一整页。然后确保您的子报表完全按此大小。

答案 1 :(得分:0)

非常简单,你也不需要接受子报告。

主报告中的

写下面的查询

SELECT
cid,
(SELECT number FROM tablename WHERE tableid IN (SELECT tableid FROM tablename WHERE tableid=(SELECT min(tableid) FROM tablename WHERE cid=$P{parameter})
FROM tablename
WHERE cid=$P{parameter}

然后在iReport中创建一组新的cid。 clik你最近创建的组乐队。查看该乐队的报告属性。 在新页面上启动clik复选框。

将你的两个归档于该乐队。 像

Cid号码 cidfield numberfield

然后运行报告。输出就是你想要的。