TfrxDBDataset
TfrxUserDataset 數據存取元件。
FastReport 使用這些元件讀取及參考數據庫的字段,這兩個元件都源於 “TfrxDataSet” 並繼承其大部分的功能。 TfrxUserDataSet 元件允許構建未連接到數據庫的報表,而由其它來源接收數(據如:數列、文件等)。在此同時,程序員僅需提供瀏覽此數據集的功能,資料接收並非由此元件執行,而是用其它的方法(例如,經由“TfrxReport.OnGetValue”事件)。
TfrxUserDataSet 元件有下列的屬性:
(1) property RecNo: Integer readonly;目前記錄編號,首筆的記錄編號是“0”
(2) property Enabled: Boolean default True;定義此 元 件是否可在designer 裏面使用。
(3) property RangeBegin: TfrxRangeBegin default rbFirst;數據導航(navigation)的起點。
下列的值可以使用: rbFirst – 從數據的第一筆記錄開始。rbCurrent – 從當前的記錄開始
(4)property RangeEnd: TfrxRangeEnd default reLast;數據導航(navigation)的起點。
下列的值可以使用: reLast – 直到數據結束。ReCurrent – 直到目前的記錄。reCount – 依“RangeEndCount” 屬性而 定。
(5) property RangeEndCount: Integer;數據集中的數據個數,此功能只在“RangeEnd”屬性等於reCount 有效。
(6) property UserName: String;符號名稱。在報表設計環境(Designer)下,將被顯示於DataSet 的下方。
(7) property OnCheckEOF: TfrxCheckEOFEvent; TfrxCheckEOFEvent = procedure(Sender: TObject; var Eof: Boolean)of object; 此事件在數據集的尾端時,Eof 參數將返回True。
(8) property OnFirst: TNotifyEvent;數據集移至第一筆的位置時,會觸發此事件。
(9) property OnNext: TNotifyEvent;數據集移至下一筆的位置時,會觸發此事件。
(10) property OnPrior: TNotifyEvent;數據集移至上一筆的位置時,會觸發此事件。
2. TfrxDBDataSet 元件用來連接以TDataSet, TTable 及TQuery 爲基類的數據庫元件,有關數據的導航及字段的參考都是自動的,程序員不需特殊的設定。
除上述屬性外,該元件有下列的屬性:
(1) property CloseDataSource: Boolean default False;報表創建完成後,關閉數據庫。
(2) property OpenDataSource: Boolean default True;在報表創建之前打開數據庫。
(3) property FieldAliases: TStrings;數據集字段的符號名稱(別名)。
(4) property DataSet: TDataSet;
(5) property DataSource: TDataSource;連結至TDataSet 或TDataSource 類型的元件。
(6) property OnClose: TNotifyEvent;當關閉數據集時觸發此事件。
(7) property OnOpen: TNotifyEvent;當打開數據集時觸發此事件
3. TfrxDesigner TfrxDesigner 元件是報表設計器,當使用此元件,你的工程文件就可以使用報表設計器,此元件它只包含一些報表設計器的設定,當加入”frxDesign” 單元到uses 清單中,就表明與報表設計器連接上了。
此元件包含下列的屬性:
(1) property CloseQuery: Boolean default True;定義結束設計報表是否詢問儲存報表之用。
property OpenDir: String;打開報表的預置數據目錄
( 3) property SaveDir: String;儲存報表的預置數據目錄。
(4) property Restrictions: TfrxDesignerRestrictions;報表設計環境下,限制不同的報表操作標識(flag),此標識包含單一或混合數據值: drDontInsertObject – 禁止插入物件drDontDeletePage – 禁止刪除頁面drDontCreatePage – 禁止建立新的頁面 drDontChangePageOptions – 禁止修改頁面屬性drDontCreateReport – 禁止建立新報表 drDontLoadReport – 禁止載入報表drDontSaveReport – 禁止儲存報表 drDontPreviewReport – 禁止預覽報表drDontEditVariables – 禁止編輯變量 drDontChangeReportOptions – 禁止修改報表屬性
(5) property OnLoadReport: TfrxLoadReportEvent; TfrxLoadReportEvent = function(Report: TfrxReport): Boolean of object; 此事件發生在載入報表之時。利用此事件,你可以從數據庫載入報表。
(6) property OnSaveReport: TfrxSaveReportEvent; TfrxSaveReportEvent = function(Report: TfrxReport;SaveAs:Boolean): Boolean of object; 此事件發生在儲存報表之時。利用此事件,你可以將報表儲存於數據庫中。
(7) property OnShow: TNotifyEvent;此事件發生在啓動報表設計環境時。
4. TfrxPreview 此元件專供建立自定義報表合預覽窗口使用。
(1) procedure AddPage;加入空白頁面到報表末端。
(2) procedure DeletePage;刪除當前頁。
(3) procedure Print;打印報表。
(4) procedure LoadFromFile;顯示文件載入窗口。
(5) procedure LoadFromFile(FileName: String);載入指定的文件。
(6) procedure SaveToFile;顯示文件儲存窗口。
(7) procedure SaveToFile(FileName: String);儲存文件到指定的文件名稱
(8) procedure Edit;載入當前頁至設計模式供編輯使用。
(9) procedure Export(Filter: TfrxCustomExportFilter);使用指定的導出過濾器導出報表。
(10) procedure First;第一頁。
(11) procedure Next;下一頁。
(12) procedure Prior;上一頁
(13) procedure Last;最後一頁。
(14) procedure PageSetupDlg;顯示頁面設定窗口。
(15) procedure Find;顯示文字搜尋窗口。
(16) procedure FindNext;繼續找下一個。
(17) procedure Cancel;取消創建報表。
(18) procedure Clear;清除報表。
你可以使用下列屬性:
(1) property PageCount: Integer readonly;報表頁數。
(2) property PageNo: Integer;目前報表頁碼(起始值爲1)。要移至其它頁面,指定此屬性的值即可。
(3) property Tool: TfrxPreviewTool;選取工具。
(4) property Zoom: Extended;顯示比例,“1” 代表100% 。
(5) property ZoomMode: TfrxZoomMode;顯示模式,可以的顯示模式如下:zmDefault – 預置值,顯示比例根據“Zoom” 屬性而定zmWholePage – 整頁模式zmPageWidth – 與頁面寬度相同 zmManyPages – 一屏顯示多頁
(6) property OutlineVisible: Boolean;是否顯示報表大綱(樹狀結構)。
(7) property OnPageChanged: TfrxPageChangedEvent;目前頁面要改變時,此事件將被觸發。
----------------------------------------------------
----------------------------------------------------
1,date給字段設置別名:
使用FRXDBDATASET 的FieldAliases屬性,示例如下:
with TfrxDBDataset(Sender) do
begin
FieldAliases.Clear;
for f:=0 to Dataset.FieldCount-1 do
begin
FieldAliases.Add(dataset.Fields[f].FullName+'='+dataset.Fields[f].DisplayLabel);//設置FRXDBDATASET的字段別名爲對應的數據集字段的DisplayLabel
end;
end;
注意:FRXDBDATASET的字段別名的格式爲"字段名=別名",
2 TfrxUserDataSet 給設置別名: 設置屬性UserName值
property UserName: String;符號名稱。在報表設計環境(Designer)下,將被顯示於DataSet 的下方。
3 Running a report 執行報表應用下列兩個“TfrxReport”元件的方法啓動報表:procedure ShowReport(ClearLastReport: Boolean = True);,
4, Designing a report 設計報表通過“TfrxReport.DesignReport”方法調用報表設計器(reportdesigner),要具有設計報表的功能,你必須在工程文件中加入“TfrxDesigner”元件,或在uses 加入“frxDesgn”單元。
5, 加載、儲存報表
function LoadFromFile(const FileName: String; ExceptionIfNotFound: Boolean = False): Boolean; 載入指定的報表,假如第二個參數的值等於”True ” 且指定的文件不存在,然後它會產生一個例外。假如文件載入成功,它返回“True”。
procedure LoadFromStream(Stream: TStream);從數據流(stream)載入報表。
procedure SaveToFile(const FileName: String);儲存報表至指定的文件名。
procedure SaveToStream(Stream: TStream);儲存報表至數據流(stream) 。報表預置的後綴名稱爲“FR3”。
範例: frxReport1.LoadFromFile('c:/1.fr3'); frxReport1.SaveToFile('c:/2.fr3');
6 Building a composite report (batch printing) 建立複合報表(批量打引)
在某些情況下,我們必須一次打印數份報表,或封裝及實現多份報表於同一個預覽窗口。要執行這項工作,在FastReport 中有多個工具,允許建立一份新的報表,置於另一份已存在的報表末端,«TfrxReport.PrepareReport»方法有此«ClearLastReport», «True»,此參數定義是否清除前一份已建立的報表。下列的程序碼示範如何從兩個報表定義文件,批次建立一份報表: frxReport1.LoadFromFile('1.fr3'); frxReport1.PrepareReport; frxReport1.LoadFromFile('2.fr3'); frxReport1.PrepareReport(False); frxReport1.ShowPreparedReport; 我們載入第一個報表並在後臺處理報表(不顯示),然後我們載入第二份報表到同一«TfrxReport»物件,並置參數 «ClearLastReport» 的值爲假(False)建立報表。此功能允許第二份報表的結果接在第一份報表的後面。最後,我們將兩份報表顯示在同一個預覽窗口中。
7 Numbering of pages in a composite report 複合報表中的頁數你可以使用 «Page», «Page#», «TotalPages» 及 «TotalPages#» 系統變量顯示頁碼或總頁數。在複合式報表,這些變量代表的意義如下:Page -目前報表的頁碼Page# -批次報表的頁碼TotalPages -目前報表的總頁數(報表必須設定爲two-pass)TotalPages# -批次報表的總頁數 Combination of pages in a composite report 複合報表的合併頁如上所述,當打印時,報表設計的屬性 «PrintOnPreviousPage»可以利用前一頁的可用空間打印下一頁的內容。在複合報表中,它允許你在前一份報表最後一頁的可用空間上建立一份新的報表,要執行此功能,必須在每一份連續報表的第一個設計頁面啓動屬性«PrintOnPreviousPage»。
8 Interactive reports 交互式報表在交互式報表中,我們可以在預覽窗口定義任何報表物件對鼠標按下的反應。例如,使用者選擇數據列,然後做一份新的報表,顯示選取列的明細數據。任何報表都可以成爲交互式報表,要執行此操作,你只需建立TfrxReport.OnClickObject 事件處理程序。下面是此事件處理的範例:
procedure TForm1.frxReport1ClickObject(Page:TfrxPage;View:TfrxView;Button: TMouseButton; Shift: TShiftState; var Modified: Boolean);
begin
if View.Name = 'Memo1' then
ShowMessage('Memo1 contents:' + #13#10 + TfrxMemoView(View).Text);
if View.Name = 'Memo2' then
begin
TfrxMemoView(View).Text:=InputBox('Edit','Edit.Memo2.text:', TfrxMemoView(View).Text);
Modified := True;
end;
end;