作者:DengGuo 通常在用fastreport作分組報表時,我們想到的是用groupheader+masterdata+groupfooter,但是在實現分組頁次時總是不能得到各分組頁次與總頁,類似 ----------------------------------------------------------- 按公司名分組後,A公司的報表有3頁,B公司的報表有5 頁,然後顯示頁次時A公司那給就顯示為 1 OF 3 2 OF 3 .... B公司顯示為 1 OF 5 2 OF 5 ....... ----------------------------------------------------------- 在FR2.54以前的版本,為這個頁次問題想了不少辦法,都未能成功,現在在FR3下終於實現了! 首先,我們設定好D6中的相應控件,這裡就不多說,如下圖: 在打印預預覽的按鈕事件中編寫如下代碼: procedure TForm1.suiButton3Click(Sender: TObject); Var i:integer; begin i:=0; Query3.SQL.Clear; Query3.SQL.Text:='select ref_no from slshph where ref_no between '''+suiEdit1.Text+''' and '''+suiEdit2.Text+''' order by ref_no desc'; Query3.Open; while not Query3.Eof do begin i:=i+1; query1.close; query1.SQL.Clear; query1.SQL.Text:='............................' ; query1.open; if i=1 then frxReport1.PrepareReport //產生第一個報表 else frxReport1.PrepareReport(False); //產生第二至n個報表 Query3.Next; end ; frxReport1.ShowPreparedReport; //顯示已產生的報表 Query3.Close; end; 在報表設計器中,主要要解決2 次報表引起OUTLINE顯示兩次分組目錄的問題,所以要在ONREPORTSTOP中寫代碼,如下: 注意:頁次要用[Page] of [TotalPages] 而不是 [Page#] of [TotalPages#] procedure frxReport1OnStopReport(Sender: TfrxComponent); begin outline.additem(<frxDBDataset1."ref_no">); outline.levelup; end; 說明:這時主要用了一個循環開啟數據庫和FR3的報表預讀來實現的,這樣在顯示報表的時候,速度會有所降低,另外一個問題就是點擊OUTLINE中的目錄時,會跳至本組報表的最尾處....以下為效果圖: |
网友回复
网友: DengGuo 于:2005-4-26 回复道: 現在解決了OUTLNE中目錄點擊後的問題 將報表設計器中的事件代碼修改即可: procedure frxReport1OnStopReport(Sender: TfrxComponent); begin outline.additem(<frxDBDataset1."ref_no">); outline.levelup; end; 改成: procedure GroupHeader1OnBeforePrint(Sender: TfrxComponent); begin if (<page>=1) and (Engine.Finalpass=true) then //當分組的第一頁和2次報表完成 outline.additem(<frxDBDataset1."ref_no">); outline.levelup; end; |
网友: DengGuo 于:2005-4-26 回复道: 提供實例下載: uploadimg/fr3demo.rar |