2012-03-13 39 views
2

我正在失去很多頭髮,試圖學習如何使用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 
} 

我只是想在一定程度上表顯示我的數據是這樣的:

a

不幸的是,Jasper Reports似乎只能用於一個數據源。我一直試圖弄清楚這一點,現在我已經打了一堵牆。我如何在Jasper Report *.jrxml文件中擁有多個數據源和表示所述數據源的表?

+0

您可以通過GenericJon上閱讀的答案[這個問題](http://stackoverflow.com/q/7482412/876298) – 2012-03-14 08:55:10

回答

2

你可以做的是使用子報表。用你想要的標題部分創建一個主報告。在主報告中,您將創建三個JRDatasources參數,每個子報告一個參數。然後,爲每個你想要的表創建每個子報表。

然後你在主報告中添加每個作爲子報告,你可能必須使用它,但我的頭頂我認爲最好的地方可能是總結。當使用ireport時,它會提示你選擇傳遞一個參數作爲子報表的數據源。

理想情況下,會有一種方法將參數與詳細信息部分相關聯,因爲在iReport中,您現在可以有多個細節部分。不幸的是,我還沒有找到辦法做到這一點,如果有人知道一種方式,請downvote並添加一個答案。

雖然還有第二種選擇,您可以在單個報告中創建自己的自定義數據源和多個詳細信息部分。基本上,你最終會創建一個新的對象,將它們組合成一個整體,並且......從來沒有想到這是一個可怕的想法。

+0

如何總結我的'List'在數據源中的JRXML模板?另外,我該如何聲明一個參數?自從我開始看這個圖書館以來,我一直都很困惑。 – 2012-03-14 00:48:53

+0

我想指出的是,如果子報表實際上佔用了多個頁面,那麼在「頁面標題」區域中放置子報表可能會導致一些問題。 「細節」或「摘要」樂隊更適合。 – 2012-03-14 00:57:46

+1

@TKKocheran>我認爲你需要[JRBeanCollectionDataSource](http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/data/JRBeanCollectionDataSource.html)。對於每個子報告,您需要爲其提供數據源,該數據源可以是主報告的參數。 – 2012-03-14 01:07:10

1

我用jasper報告的列表元素完成了這項工作,並將數據源作爲參數傳遞給報告。 確保將列表放入可能增長的樂隊中,否則您的內容可能會被截斷。

  <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> 
相關問題