我正在尝试学习如何使用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
文件中包含多个表示所述数据源的数据源和表?
答案 0 :(得分:2)
您可以做的是使用子报告。使用所需的标题部分创建主报告。在主报表中,您将创建三个参数,即JRDatasources,每个子报表一个。然后,为每个所需的表创建每个子报表。
然后你在主报告中添加每个作为子报告,你可能不得不玩它,但是我认为放在最好的地方可能是摘要。使用ireport时,它会提示您选择传递参数作为子报表的数据源。
理想情况下,有一种方法可以将参数绑定到详细信息部分,因为在iReport中,您现在可以拥有多个详细信息部分。不幸的是,我没有找到办法做到这一点,如果有人知道一种方式,请downvote并添加答案。
虽然还有第二个选项,您可以在一个报表中创建自己的自定义数据源和多个详细信息部分。从本质上讲,你最终会创建一个新的对象,将它们全部合并为一个......从来没有想到这是一个可怕的想法。
答案 1 :(得分:1)
我使用jasper报告的list元素执行此操作,并将数据源作为参数传递给报告。 确保将列表放在一个可以增长的频段中,否则您的内容可能会被截断。
<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>