1, 一個報表檔案包含多個Page,
2 Page1,對應第一個資料集
3, page2,對應第二個資料集
4, 列印完第一個資料集列印第二個資料集,怎樣在列印第二page,頁碼從1算起?比如第一個page為 2頁,第二個為page為3頁.分別顯示如下,1/2, 2/2, 1/3 2/3. 3/3.
如何實作?
uj5u.com熱心網友回復:
這個估計得自己去寫代碼實作了。uj5u.com熱心網友回復:
這里的情況適用于FastReport2.53版本。報表頁碼一般情況下就象在Word里一樣不用費什么腦筋,FastReport里直接從系統變數可以得到。但特殊情況下就無法輕松得到了。
這里談的是分組頁碼的問題,就是在報表分組的情況下。首先是每個分組強制分頁,然后頁碼重新計數。比如5頁分為二組,一組占了2頁,另一組占3頁。平常顯示只要
1/5 2/5 3/5 4/5 5/5
這時要變成
1/2 2/2 1/3 2/3 3/3
第幾頁這是很容易算出來的,用個變數來表示頁碼,分組結束后重新算頁碼就行了,難點就在分組的頁數,基本思路就是利用兩遍報表,第一次得到各個分組的總頁數,第二次再顯示之。
首先定義三個變數,GPage用來表示頁碼初始值為1,PageList用來存放分組的頁碼數初始值為{0},GIndex用來計算分組的索引初始值為0,FGIndex用來第二次遍歷時計算分組索引,其實這個與GIndex可以共用一個,但為了清晰起見分開用。
在PageFooter的BeforePrint里寫
GPage := GPage + 1;
在GroupFooter的BeforePrint里寫
if FinalPass then //二次遍歷時增加分組索引
FGIndex := FGIndex + 1
else
begin
setLength(PageList,GIndex + 1);
PageList[GIndex] := Gpage; //存放分組的總頁數
GIndex := GIndex + 1;
end;
GPage := 0;
這樣所有的東西都有了,在顯示頁碼的Memo里填[GPage]。
在顯示頁數的Memo下面腳本段里寫
if not FinalPass then exit;
MemoPageCount.Lines[0] := PageList[FGIndex];
(MemoPageCount 是這個Memo的名字)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/162099.html
標籤:VCL組件開發及應用
上一篇:關于多維指標的使用
