Java報表工具FineReport擁有參數聯動功能。所謂報表參數聯動指的是每一個後面的參數下拉框的值會根據前一個參數的值改變而改變。如下圖中,參數studentno跟隨上一個參數classno的值而變動,而參數grade又跟隨studentno的值而變動,效果如下:

下面看一下用Java報表工具FineReport實現這種參數聯動效果的過程
1.報表表樣設計

2.參數設置
2.1 報表參數設計
打開菜單欄中報表|報表參數,清除之前的參數,新定義三個名為classno、studentno、grade的參數,如圖:

java報表工具FineReport參數定義
2.2 參數設計
2.2.1 打開報表參數設計面板,按照下圖安排參數的位置

java報表工具FineReport參數面板
2.2.2 控制項設置
右擊classno的控制項,選擇控制項設置,選擇下拉框類型編輯器,控制項名選擇classno
定義欄選擇數據查詢的數據集ds1,預覽可以看到我們需要的參數可選值位於第1列,因而在實際值和顯示值處都選擇列1

java報表工具FineReport參數控制項1
右擊studentno的控制項,選擇控制項設置,選擇下拉框類型編輯器,控制項名選擇studentno
定義欄選擇動態SQL,語句為SELECT * FROM STSCORE WHERE CLASSNO=’${classno}’,其中參數外的單引號表示參數classno為字元串形式。
CLASSNO=’${classno}’ 限制了此處參數studentno是在上一個參數classno值的已定基礎上進行篩選,實現了參數聯動。
預覽可以看到我們需要的參數可選值位於第2列,因而在實際值和顯示值處都選擇列2

Java報表工具FineReport參數控制項2
右擊grade的控制項,選擇控制項設置,選擇下拉框類型編輯器,控制項名選擇grade
定義欄選擇動態SQL,語句為SELECT * FROM STSCORE WHERE STUDENTNO=${studentno},參數外沒加單引號是因為studentno並不是字元串形式。
STUDENTNO=${studentno}限制了此處參數grade是在上一個參數studentno值的已定基礎上進行篩選,實現了參數聯動。
我們需要的參數可選值位於第6列,因而在實際值和顯示值處都選擇列6

Java報表工具FineReport參數控制項3
3. 添加過濾
切換到模板界面,由於單元格D2中的數據列GRADE有左父格A2和上父格D1,所以需要給A2和D1都添加過濾條件。
3.1 A2添加過濾條件
給A2添加如下2個過濾條件:

Java報表工具FineReport過濾設置1
3.2 D1添加過濾條件
給D1添加如下2個過濾條件:

Java報表工具FineReport過濾設置2
4. 預覽並保存

將報表模板保存為
%FR_HOME%WebReportWEB-INFreportletsdocTutorialParameterparalinkage.cpt

FineReport報表免費下載——零編碼做報表、多維圖表、多源填報、許可權管理,完美兼容excel。官網:http://www.finereport.com/tw/