【问题标题】:JasperReports: subreport paginationJasperReports:子报表分页
【发布时间】:2011-05-18 21:46:36
【问题描述】:

我在网上找了一个星期我的问题,但我还没有找到,这是我的问题,我希望这里的任何人都可以帮助我解决这个问题。

假设我有以下数据:

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 个电话号码。

第 1 页:

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

第 2 页:

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

第 3 页:

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

我的问题是:

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

【问题讨论】:

    标签: java jasper-reports ireport


    【解决方案1】:

    1
    您的主要报告查询应返回您要显示的电话号码。比如:

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

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

    2
    使用 Jasper 进行分页比较棘手且不太容易,但有一些解决方法。
    在我的项目中,我们确保所有乐队都是我们想要的高度。 在您的情况下-根据需要创建主报告-带有标题等,并计算您需要详细信息带的高度,以便占用一整页。然后确保您的子报表完全符合这个大小。

    【讨论】:

      【解决方案2】:

      非常简单,您也无需进行子报告。

      在主报告中 编写如下查询

      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 组。 单击您最近创建的组乐队。查看该乐队的报告属性。 单击“在新页面上开始”复选框。

      把你的两个文件放在那个乐队上。 喜欢

      Cid 号码 cidfield 号码字段

      然后运行报告。输出如你所愿。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-14
        • 2013-11-11
        • 1970-01-01
        • 1970-01-01
        • 2014-01-01
        • 1970-01-01
        • 2012-08-03
        相关资源
        最近更新 更多