在Java報表軟件中,選擇特定的參數后,會返回我們要查詢的數據,然而假如沒有輸入參數值,我們卻仍需要返回數據時該怎樣處理呢?以下就用FineReport報表軟件的一個例子實現這種參數為空時返回所有數據的效果,介紹數據源參數與報表參數的實現方法。
1.數據源參數實現參數為空選出全部
1.1 定義數據源
新建名為ds1的數據庫查詢,SQL語句
SELECT * FROM StScore WHERE 1=1
${if(len(classno) == 0,""," and ClassNo = '" + classno + "'")}
${if(len(studentno)==0,""," and StudentNo = " + studentno )}
說明:
? where 1=1表示條件永真,防止沒有之后的參數條件時,where多出而導致出錯;
? len(classno) == 0表示參數為空;
? ${if(len(classno) == 0,""," and CLASSNO = '" + classno + "'")}表示當參數classno為空時,就返回空字符串,否則返回查詢條件and CLASSNO = ' classno' 。
1.2 模板設計
報表制作模板定義如下

綁定數據列

1.3 參數設計界面
1.3.1 打開參數設計界面,按照下圖安排參數的位置
1.3.2 控件設置
定義參數classno控件類型為下拉框,其他定義如下圖

定義參數studentno控件類型為下拉框,并以classno的值進行關聯查詢,定義如下

說明:動態SQL語句SELECT * FROM STSCORE where ClassNo = '${classno}'表示直接從數據表STSCORE選取符合參數classno的數據
1.4 保存并預覽
點擊設計器上的分頁預覽,頁面如下圖,不輸入參數值,直接點擊查詢按鈕,返回全部數據:
2.報表參數實現參數為空選出全部
2.1 定義數據源
新建名為ds1的數據庫查詢,SQL語句:SELECT * FROM StScore
2.2 模板設計、綁定數據列,步驟與1.4中完全相同,此處不用贅述
2.3 定義報表參數
在菜單欄選擇報表|報表參數,打開報表參數面板,添加classno和studentno兩個參數,默認值選擇字符串形式,并留空,即表示默認值為空值,如下圖
2.4 添加過濾
選中A2單元格,添加過濾條件

說明:其中if(len($classno)==0,nofilter,$classno)表示若參數classno為空,則不過濾,否則返回參數值。
2.5 參數設計界面
同步驟1.3。
2.6 保存并預覽

文章轉自:http://blog.vsharing.com/fanfanzheng/A1303633.html