2012-03-13 94 views
2

我正在失去很多头发,试图学习如何使用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 
} 

我只是想在一定程度上表显示我的数据是这样的:

a

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

+0

您可以通过GenericJon上阅读的答案[这个问题](http://stackoverflow.com/q/7482412/876298) – 2012-03-14 08:55:10

回答

2

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

然后你在主报告中添加每个作为子报告,你可能必须使用它,但我的头顶我认为最好的地方可能是总结。当使用ireport时,它会提示你选择传递一个参数作为子报表的数据源。

理想情况下,会有一种方法将参数与详细信息部分相关联,因为在iReport中,您现在可以有多个细节部分。不幸的是,我还没有找到办法做到这一点,如果有人知道一种方式,请downvote并添加一个答案。

虽然还有第二种选择,您可以在单个报告中创建自己的自定义数据源和多个详细信息部分。基本上,你最终会创建一个新的对象,将它们组合成一个整体,并且......从来没有想到这是一个可怕的想法。

+0

如何总结我的'List'在数据源中的JRXML模板?另外,我该如何声明一个参数?自从我开始看这个图书馆以来,我一直都很困惑。 – 2012-03-14 00:48:53

+0

我想指出的是,如果子报表实际上占用了多个页面,那么在“页面标题”区域中放置子报表可能会导致一些问题。 “细节”或“摘要”乐队更适合。 – 2012-03-14 00:57:46

+1

@TKKocheran>我认为你需要[JRBeanCollectionDataSource](http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/data/JRBeanCollectionDataSource.html)。对于每个子报告,您需要为其提供数据源,该数据源可以是主报告的参数。 – 2012-03-14 01:07:10

1

我用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>