JasperReports嵌套循环

时间:2013-08-28 12:41:21

标签: java jasper-reports

目标是以下结构

Static Text
--------------------
Category 1
    SubCategory 1_1
    SubCategory 1_2
    ...
Category 2
    SubCategory 2_1
    ....
...
--------------------
StaticText

要获取动态数据,我使用以下bean结构

public class  BeanFactory {

  public  static Collection getVehicleData() {return the Collection}
}

类别类

public class VehicleData {
  private String category;
  private List<WarningData> warnings;
}

WarningData类是POJO。所以有人能给我一个提示,我怎么能得到这种结构?

  1. 我尝试使用两个数据集,一个是使用beanfactory创建数据,另一个应该使用vehicledata类来获取warningdata。但这对我没用。
  2. 我试图将它分组。但我不知道如何访问警告数据
  3. 我应该使用iReport Designer中的表格或列表组件吗?
  4. 我可以在表达式编辑器中使用循环吗?
  5. 更新 为了清楚这一点。我如何迭代子类别?我成功完成了类别的迭代,但我不知道如何迭代子类别中的每个类别。

2 个答案:

答案 0 :(得分:0)

解决方案是Lisa评论的一种暗示。我没有在问题中使用数据结构,而是创建了一个“扁平”结构,如下所示:

public class VehicleData2 {
   private String category;
   private String categoryIconPath;
   private String iconPath;
   private String headline;
   private String warning;
}

最后三个属性封装在一个新类WarningData中。但我无法迭代抛出这个警告数据列表,所以在我的解决方案中有e。 G。类别中的冗余。但是使用这种结构,可以对类别使用报告组,并将警告数据放入jasperreport的详细信息部分。

答案 1 :(得分:0)

对记录的子数据进行迭代的唯一两种方法似乎是子报表

每个数据源都是通过平面列表的迭代器。您的报告仅包含一个重复的概念,即对数据源中的每个记录重复一个 Detail 部分。表格和子报表都有自己的数据源(可能完全取决于包含报表的当前迭代),并相应地重复其 Detail 部分。由于它们可以嵌套,因此从理论上讲,Jasper允许根据需要进行任意循环。只是您需要为每个循环引入一个子报告或一个表:

  • 根记录的 Detail 部分
  • 子报表
  • 详细信息部分
  • 详细信息部分