JasperReports入門教程(四):多數據源


JasperReports入門教程(四):多數據源


背景

在報表使用中,一個頁面需要打印多個表格,每個表格分別使用不同的數據源是很常見的一個需求。假如我們現在有一個需求如下:需要在一個報表同時打印所有老師的數據,再打印每個年級的學生的數據。那么本章我們就用這個例子來實現多數據源。

方案分析

通過上一篇基礎組件的介紹,我們知道一個JasperReport報表中可以有多個Detail的Band,但是卻共享一個主數據源,多個Detail是共享這個主數據源。查看Paramter和Field發現他們都支持java.util.List類型。那么我們可不可以用一個List類型的Paramter做老師的數據源,一個List類型的Field來做學生的數據源,這樣就解決了數據源的問題。

我們來看看如何打印,Detail都是讀取主數據源的數據,直接通過Detail來打印行不通,我們發現一個表格組件Table,這個組件的用DataSet來做報表設計的源。而那么思路就明確了。用Paramter和Field來做數據源,用Table作為打印組件,用DataSet來填充Table中要打印的字段。

添加多數據源

1.在Paramters中新增一個teachList的屬性,類型為java.util.List。如下圖所示

2.在Fields新增一個studentList的字段,類型為java.util.List。如下圖所示

添加DataSet

1.在Outline上右鍵Create Dataset創建一個teachDataset

2.如法炮制,在創建一個studentDataset的Dataset。

3.在teachDataset中的Field上增加需要打印的字段name,job

4.在studentDataset中的Field上增加需要打印的字段name,age,sex

添加Table組件

1.從右側的basic Elements工具框增加一個Table組件到 Page Header 的Band。選擇Create a Table using an existing dataset,選擇teachDataset,並點擊next按鈕。

2.選擇 Use a JRDatasource expression,填寫new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{teachList})數據,點擊next按鈕。
這里是把teachList屬性包裝為一個JRBeanCollectionDataSource集合對象作為Table的數據源

3.把左邊的Field全部選到右邊,點擊next按鈕

4.下面的界面是設置Table組件需要展示的布局和樣式,我們只選擇Add Column Header只增加一個列頭。大家可以根據需要來設置,並點擊完成

5.雙擊Table可進入Table的編輯界面,在這個界面可以增加,減少列,設置樣式

6.同樣的方式,在Detail1新增一個Table組件,綁定studentDataset

7.Table組件設置Dataset如下圖所示

代碼開發

核心代碼就是給屬性teachList和字段studentList賦值,和前幾章類似,比較簡單就不貼代碼了

本節代碼和報表模板


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM