天天看點

水晶報表分組分頁且每頁最多顯示N條記錄

本文為解http://topic.csdn.net/u/20111128/10/041ccade-1fa9-4bb2-b1ad-72430b233a97.html?50470所作

先确認下原帖需求:

1、詳細節最多5條記錄(不能超過5條);

2、無論前一組是否滿5條記錄,每個新組都要另起一頁

主要就這兩點。

我們知道每頁最多顯示N條的控制方法,打開節專家,在詳細節後面建立頁公式編輯:

RecordNumber mod N = 0

RecordNumber即記錄數,無論分組與否,是自動随記錄遞增的,是以在這裡,我們不能用RecordNumber,而應該是在每個新組前要重置這個RecordNumber,用這個重置的RecordNumber來取模控制每頁最多顯示5條記錄,于是我們很自然就想到了運作總計字段,由它來幫我們重置RecordNumber,這樣我們應該就很明朗了,接下來讓我們一起去設計模闆:

報表按ID分組就不用再提及了吧?(右擊報表空白處->插入->組)

首先建立一運作總計字段,如圖示

水晶報表分組分頁且每頁最多顯示N條記錄

該運作總計字段就是為了重置RecordNumber,模闆設計好後應該是這樣的,如圖示

水晶報表分組分頁且每頁最多顯示N條記錄

就這樣是達不到我們需求的,我們還要為它處理下:)

針對需求1,我們的處理方案是

水晶報表分組分頁且每頁最多顯示N條記錄

針對需求2,與需求1同理,隻不過此時我們是在#組尾(組頁腳)節後面建立頁的公式編輯:

Not OnLastRecord

OnLastRecord意指最後一條記錄,Not OnLastRecord自然是非最後一條記錄,在這裡就是指非最後一條記錄時就在後面頁建立頁,最後一條記錄時就不用再建立頁了。若不用該公式控制的話,報表的最後一頁總是空白頁(沒有詳細節資料)

原帖還有一個小需求:在第一頁的ID後自動加-(1),第二頁ID後自動加-(2)

其實應該是在每個#組頭(組頁眉)處顯示 "ID:" + ID值   而已:)

這樣我們隻需把分組後的組名自定義一下即可,如圖示:

水晶報表分組分頁且每頁最多顯示N條記錄

由于這邊的ID是數字型,是以用ToText函數把它轉成字元型,後面的參數0表示保留0位小數(即不保留小數)

本文的重點是在模闆的設計,代碼就不晾出來了

=========================================================================================================================

Modified @2011-11-29 21:45

前文提及的小需求:在第一頁的ID後自動加-(1),第二頁ID後自動加-(2)

本人了解錯了,應該是組内頁碼重置,抱歉~  

其實泰哥這篇【分享】水晶報表組内分頁已經做到這個效果了,但不知道為什麼我這竟然沒有找到RoundUp函數,是以修改下泰哥原文公式x1的内容如下:

//每個組的總記錄數
NumberVar groupRecordCount := Count ({DataTable3.Type}, {DataTable3.ID});

//每個組的總頁數 
NumberVar groupPageCount := groupRecordCount / 5;
If Int(groupPageCount) <> groupPageCount Then
(
  groupPageCount := Int(groupPageCount) + 1
);

//重置後的RecordNumber
NumberVar groupRecordNumber := {#RTotal0};

//組内目前頁
NumberVar groupPageNumber := groupRecordNumber / 5;
If Int(groupPageNumber) <> groupPageNumber Then
(
  groupPageNumber := Int(groupPageNumber) + 1
);

//最終報表界面顯示
'第' + ToText(groupPageNumber, 0) + '頁 / 共' + ToText(groupPageCount, 0) + '頁'
           
//說明:Int函數是取整函數,如Int(1.2)=1; Int(1.9)=1
           
//寫好後将該公式字段拖放到#組頭(組頁眉)節即可
           

繼續閱讀