實現的效果展示一下:
主要就是給前面提到的簡單應用(水晶報表(CrystalReports)的簡單應用(ASP.NET) .)中的報表添加分頁功能 並且保證
當資料記錄不夠一頁時可以由空白行補全
首先應該分析報表結構
通過很容易看出,報表主要分為表頭,明細,腳註。這個單據是固定紙張寬度高度的,我們的表頭,明細很好處
理,但是腳註放哪一節裡呢?(問題一)
每六行資料規定了一頁,如果一頁中只有三行資料,為了保證腳註的位置不變列印出來的單據格式整齊,如何將其它
三行由空白行補全呢?(問題二)
通過分析,我們可以想到利用分組得到想要實現的效果
1.表頭寫到頁首節;明細寫到詳細資料節;腳註寫到組尾;
2.其它空白行由組來控制;
(1)根據頁的行數確定組尾數,這裡每頁顯示六行,我們至少要有五行的空白行;
(2)所以將組尾分成六份,前五項用來控制是否要補空白行,最後一行用來顯示腳註;
註:上面這個格式設定由開發人員決定,不一定非要放到這些地方,目前為了實現這一個效果,我的實現是這樣
具體實現
1.插入組:【欄位總管】→【插入組】
(1)組很通俗易懂,把通過一或多個過慮條件的資料放在一起,這裡當然也得選擇一個欄位作為分組的依據,資料來源
這裡用的是.net對象,是一個具體的實體類,在這個實體物件中,有這樣一個屬性專門為分組服務的標識器如:
//分組標識器 private int crorder; public int Crorder { get {return crorder; } set { crorder = value; } }
(2)綁定報表的資料來源是一個List裡面也許會有很多條記錄,為了每頁顯示6條,簡單的將可以設定標識器的值為每6條記錄+1
這樣預設值0,記錄六條時改為1,在增加6條改為2.這樣分組時會自動根據這個值把資料按每頁6條記錄分開如:
//得到資料來源List的方法中這樣處理i記錄總條數,6為每頁顯示記錄數,corder臨時標識,m.Crorder為實體物件的分組標識器
if (i % 6== 0) { corder++; m.Crorder = corder; } else{ m.Crorder = corder; }
//如果除6餘0說明i為6的倍數,要分組,對分組標識器+1操作,如果餘數不為0,證明這一頁不鳴6條記錄,分組標識不變
組專家如下
2.組尾繼續插入組,分為六(a,b,c,d,e,f)如下:
報表面板內右擊【報表】→【節專家】進行相應配置
註:提到的有配置,沒有提到的就按預設
組頭
【在後面頁建立頁】後面的按鈕點開寫入:groupnumber mod 1 =0點擊【儲存並關閉 】如下:
組尾a
【抑制顯示】後面的按鈕點開寫入:
註:ImportStoragePrintModel.Number是實體物件中的一個屬性,在這裡就是通過Count(欄位名)統計行數的作用,這個組尾a實現的功能是如果最後一行的行數除6餘數在0到5之間時顯示,否則不顯示,【抑制顯示】裡false代表不抑制顯示
if Count ({ImportStoragePrintModel.Number}) mod 6>0 and Count ({ImportStoragePrintModel.Number}) mod 6<=5 and onlastrecord then
false
else
true
點擊【儲存並關閉 】如下:
下面只把組尾b,c,d,e代碼貼出,圖都如組尾a
組尾b
if Count ({ImportStoragePrintModel.Number}) mod 6>0 and Count ({ImportStoragePrintModel.Number}) mod 6<=4 and onlastrecord then
false
else
true
組尾c
if Count ({ImportStoragePrintModel.Number}) mod 6>0 and Count ({ImportStoragePrintModel.Number}) mod 6<=3 and onlastrecord then
false
else
true
組尾d
if Count ({ImportStoragePrintModel.Number}) mod 6>0 and Count ({ImportStoragePrintModel.Number}) mod 6<=2 and onlastrecord then
false
else
true
組尾e
if Count ({ImportStoragePrintModel.Number}) mod 6>0 and Count ({ImportStoragePrintModel.Number}) mod 6<=1 and onlastrecord then
false
else
true
資料來源的綁定在簡單應用(水晶報表(CrystalReports)的簡單應用(ASP.NET) .)中提到這裡不在討論