【问题标题】:Multiple sections in one report一份报告中的多个部分
【发布时间】:2012-03-13 23:56:09
【问题描述】:

为了学习如何使用 Jasper 报告,我失去了很多头发。从本质上讲,我有大约五个 java.util.List 对象,每个对象都键入代表我的数据的不同数据类型:

public class Person { 

    private int id;

    private String firstName;

    private String lastName;

    private int age;

    // accessors/mutators omitted for brevity
}

public class Place {

    private int id;

    private String name;

    private String type;

    private String state;

    // accessors/mutators omitted for brevity
}

public class Thing {

    private int id;

    private String name;

    private int rating;

    // accessors/mutators omitted for brevity
}  

我只是想在表格中显示我的数据,有点像这样:

不幸的是,Jasper Reports 似乎真的只设计用于一个数据源。我一直试图弄清楚这一点,但我已经碰壁了。如何在 Jasper Report *.jrxml 文件中拥有多个数据源和表示所述数据源的表?

【问题讨论】:

标签: jasper-reports


【解决方案1】:

您可以做的是使用子报表。创建具有所需标题部分的主报告。在主报告中,您将创建三个参数,即 JRDatasources,每个子报告一个。然后为所需的每个表创建每个子报表。

然后您将每个作为子报告添加到主报告中,您可能不得不使用它,但我认为最好的放置位置可能是摘要。使用 ireport 时,它会提示您选择将参数作为子报表的数据源传递。

理想情况下,有一种方法可以将参数绑定到详细信息部分,因为在 iReport 中您现在可以拥有多个详细信息部分。不幸的是,我还没有找到一种方法来做到这一点,如果有人知道方法,请投票并添加答案。

虽然还有第二个选项,您可以在单个报告中创建自己的自定义数据源和多个详细信息部分。本质上,您最终会创建一个新对象,将它们全部组合成一个,然后....没关系,这是一个可怕的想法。

【讨论】:

  • 如何将我的List 包装到 JRXML 模板的数据源中?另外,如何声明参数?自从我开始看这个图书馆以来,我一直很困惑。
  • 我想指出,如果子报告实际上占用了超过一页,则将子报告放在“页眉”区域可能会导致一些问题。 “Detail”或“Summary”乐队更合适。
  • @TKKocheran > 我认为你需要JRBeanCollectionDataSource。对于每个子报表,您需要为其提供一个数据源,它可以是您的主报表的一个参数。
  • Rangi 正确地将每一个包装在 JRBeanCollectionDataSource 中。就该部分而言,摘要可能是最好的。我总是忘记把它放在哪一个,而且我现在没有 iReport 在我面前。所以谢谢@Rangi。
【解决方案2】:

我使用 jasper 报告的列表元素执行此操作,并将数据源作为参数传递给报告。 确保将列表放在一个可以增长的范围内,否则您的内容可能会被截断。

            <componentElement>
                <reportElement x="0" y="321" width="442" height="13" isRemoveLineWhenBlank="true"/>
                <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Vertical">
                    <datasetRun subDataset="produkt">
                        <dataSourceExpression><![CDATA[$P{produkteDataSource}]]></dataSourceExpression>
                    </datasetRun>
                    <jr:listContents height="13" width="442">
                        <!-- Content goes here -->
                    </jr:listContents>
                </jr:list>
            </componentElement>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多