摘要:
提供一種方案,使分頁瀏覽的報表每頁顯示固定條數記錄,最后一頁記錄條數不足的,用空行補齊。
示例:
記錄共7條,每頁顯示5條記錄:
下載代碼(vs2008,需要安裝AdventureWorks數據庫)
下載代碼(vs2008,不需要數據庫支持)
下載代碼(僅rdlc報表定義文件)
原理:
由於表的分組包含“在起始處分頁”和”在結束處分頁”的功能,所以我們考慮先將數據分成若干個記錄條數為N的組,
再啟用“在結束處分頁”的功能。
那么,如何分組呢?考慮記錄的下標為 0,1,2,3... 的自然數序列,用下標除以N(設為3),得到以下數列:
0 /3 取整:0
1 /3 取整:0
2 /3 取整:0
3 /3 取整:1
4 /3 取整:1
5 /3 取整:1
6 /3 取整:2
所以,我們可以以下標除以3的商的整數值對數據進行分組,則每個分組包含3條數據。當記錄條數不能被3整除時,最后一個分組會不足3。分組表達式為 =Int((RowNumber(Nothing) - 1) / N)。
另一個需要考慮的問題是,最后一個分組的記錄條數可能不足N,怎樣以空白行補齊它呢?考慮TableRow.Visibility.Hidden屬性,可通過表達式設置它的狀態。為此,我們在詳細信息組內額外添加N-1行,如果檢查到當前是記錄的最后一組最后一條並且該組記錄條數不足N時,將Hidden設為Flase;其它情況為True。
表達式為=IIf(RowNumber(Nothing) = CountRows("table1") AndAlso CountRows() <= r,False,True)。其中r從1開始遞增。
實現:
1.新建WinForm項目,用報表向導添加一張報表,數據源為AdventureWorksDataSet的Employee數據庫表,調整詳細信息(這里只選擇了表內前面7條數據):
2.(以下都是在報表的設計模式中)在表內添加組,分組表達式為 =Int((RowNumber(Nothing) - 1) / 3),取消包括組頭和包括組尾,勾選在結尾處分頁:
3.連續插入兩行:
4.選擇插入的第一行(TableRow3),在Visibility的Hidden屬性下選擇“表達式”,在打開的文本框內填入
=IIf(RowNumber(Nothing) = CountRows("table1") AndAlso CountRows() <= 1, False, True);同理,在插入的第二行(TableRow4)同位置填入
=IIf(RowNumber(Nothing) = CountRows("table1") AndAlso CountRows() <= 2, False, True):
5.運行程序,可以看到前兩頁分別只有3條記錄,最后一頁1條,空白處用空行補齊了:
注意:
如果要在數據集記錄條數為0的時候也達到這個效果,只能在數據傳遞到報表之前預處理,添加一行空記錄。