Ireport使用Beans对List进行子报告

时间:2012-11-07 16:11:25

标签: jasper-reports ireport

我正在使用bean对象作为数据源。数据源包含几个属性 - 其中一个是我试图使用的行项列表。通过bean看起来像这样:

String name;
String address;
List<DetailRecord> records;

我希望将记录显示为报告中的详细信息行。我知道我需要设置子报告,但我不确定如何设置子报告以使用当前父数据项的记录元素作为数据源。

2 个答案:

答案 0 :(得分:6)

好的..我想出了我需要做的事情。对于子报告,我需要指定数据源 这样:

 new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{records})

这里有一些“Gotcha's”让我陷入了一段时间:

  • 您必须使用完整的类名(仅使用JRBeanCollectionDataSource)将无法正常工作
  • 在主报告中,您必须将记录类型设置为java.util.list(或相应的类。

由于父级中的记录字段默认为String,我的尝试一直在轰炸(没有可见的错误)。一旦我将其更改为列表,事情就开始起作用了。

答案 1 :(得分:1)

另一个解决方案,它可能对某人有帮助:)。

    来自主报告的
  1. ,用于子报告集 - 使用datasorce表达式。

  2. 数据源表达式设置如 - new MySubRepClass($ F {list} .get(counter))。

  3. MySubRepClass是子报表的bean数据源(类似于datasource bean),list(master报表中的属性)包含其实例。

  4. MySubRepClass应该实现JRDataSource

  5. 格鲁克!