水晶報表(CrystalReports)進階篇-通過分組實現分頁功能

來源:互聯網
上載者:User

 實現的效果展示一下:

      主要就是給前面提到的簡單應用(水晶報表(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) .)中提到這裡不在討論

 

 

 

 

     

            

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.