2015-11-02 95 views
0

我有一個目標列表,其中每個目標都有另一個列表列表。我想要使​​用子報表顯示子數組列表中的詳細信息。我想爲子數組列表中的每個對象都有一個子報表。在iReport列表中創建子報表

我面臨的問題是,我似乎無法找到一種方法來指定arraylist作爲子報表的數據源。在嘗試創建數據源時,我無法選擇構建列表的數據集的字段,只能選擇主報表的字段。

在iReport中可以這樣做嗎?我現在堅持了這一段時間。任何幫助表示讚賞。 :)

+0

它定義成這樣,你可以添加你嘗試了一些代碼...?像這樣的問題是非常「挑剔」,我可以嘗試回答,但我需要猜測你真的想做什麼......你的bean對象(一些代碼)如何,你想傳遞給子報表? ..ecc。 –

+0

[如何將主報表數據源傳遞給子報表(JasperReports)?](http://stackoverflow.com/questions/8490563/how-to-pass-main-report-data-source-to-subreport- jasperreports) –

回答

1

有了這些信息將是答案。

主要豆(你的目標是什麼?),包含其他的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; 
    } 
} 

子豆

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. 我建議你通過開發文件文件的位置作爲一個參數(注碧玉報告需要絕對路徑)ES。在主報告

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

和在Java通過它(例如,在工作目錄子文件夾 「碧玉」 中是subreport.jasper的位置)

paramMap.put("SUBREPORT_DIR", new File("jasper").getAbsolutePath() + File.separator); 
  • 現在只需從主報告中調用你的子報表(需要編譯成.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> 
    
  • 因此:

    我創建的子報告傳遞的SubBeanList當前Bean

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

    指示編譯的絕對位置的新JRDataSource subreport.jasper

    $P{SUBREPORT_DIR} + "subreport.jasper" 
    

    所以現在在你的報表可以使用領域:在SubBeanvar2,只是在subreport.jrxml

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

    感謝您的回覆。 本質上,我有一個父列表組件在ireport。裏面有我的報告。 subBeans字段是列表組件數據集的一部分,而不是主要報告。我知道它有可能使用主要報告字段來開發數據源表達式,我的問題是我想從我的數據集中使用一個字段。那可能嗎? – Victo

    +0

    「我想從我的數據集中使用一個字段」,在主報告中,或子報表中的主Bean。嘗試使用Beans和一些jrxml編輯問題 –