jasper-reports - 使用列表列表创建子报表

标签 jasper-reports subreport

我有一个目标列表,每个目标中都有另一个 ArrayList。我想使用子报表显示子 ArrayList 中的详细信息。我想为子 ArrayList 中的每个对象创建一个子报表。

我面临的问题是,我似乎无法找到一种方法来为子报表指定 ArrayListas 数据源。尝试创建数据源时,无法选择构建列表的数据集的字段,只能选择主报表的字段。

是否可以在 jasper 报告中执行此操作?我现在坚持这个很长一段时间了。

最佳答案

根据给定的信息,这就是答案。

主 bean(您的目标?),包含其他 bean (SubBean) 的 List

public class Bean {
  private String var1;
  private List<SubBean> subBeans;
  public String getVar1() {
    return var1;
  }
  public void setVar1(String var1) {
    this.var1 = var1;
  }
  public List<SubBean> getSubBeans() {
    return subBeans;
  }
  public void setSubBeans(List<SubBean> subBean) {
    this.subBeans = subBean;
  }
}

子bean

public class SubBean {
  private String var2;
  public SubBean(String var2){
    this.var2 = var2;
  }
  public String getVar2() {
    return var2;
  }
  public void setVar2(String var2) {
    this.var2 = var2;
  }
}

如何将 SubBean 列表传递给子报表。

  1. 您需要主报告中的字段 subBeans。

    <field name="subBeans" class="java.util.List"/>
    
  2. 我建议你将 .jasper 文件的位置作为参数传递(注意 jasper 报告需要绝对路径)es。在主报告中

    <parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false"/>
    

并在 java 中传递它(例如,工作目录中的子文件夹“jasper”是 subreport.jasper 的位置)

paramMap.put("SUBREPORT_DIR", new File("jasper").getAbsolutePath() + File.separator);
  1. 现在只需像这样从主报告中调用您的子报告(需要编译成 .jasper)。

    <subreport>
      <reportElement x="105" y="4" width="400" height="100"/>
      <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{subBeans})]]></dataSourceExpression>
      <subreportExpression class="java.lang.String"><![CDATA[$P{SUBREPORT_DIR} + "subreport.jasper"]]></subreportExpression>
    </subreport>
    

因此:

我正在创建一个新的 JRDataSource对于传递当前BeanSubBeanList的子报表

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

表示编译后的subreport.jasper的绝对位置

$P{SUBREPORT_DIR} + "subreport.jasper"

所以现在在你的子报表中你可以使用字段:SubBeanvar2,只需在 subreport.jrxml 中这样定义它

<field name="var2" class="java.lang.String"/>

关于jasper-reports - 使用列表列表创建子报表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33475934/

相关文章:

java - 如何使用 JasperReports API 更改 JRBaseSubreport 表达式

jasper-reports - jasperreports 子报表不拆分

java - 无法找到 Jasper Report (.jrxml) 源路径

rdlc - RDLC 子报表中的分页符不出现

reporting-services - SSRS神秘的额外页面

jasper-reports - JasperServer:无法定位子报表异常

java - 趋势线的最佳拟合曲线

jasper-reports - 将 Jasper ContitionalStyles 与命名样式引用一起使用

jasper-reports - 当组发生变化时如何应用条件样式?

jasper-reports - Jasper Java 编译 NoClassFound 异常