FastReport VCL程序員手冊:交互式報表
FastReport VCL是用于Delphi,C ++ Builder,RAD Studio和Lazarus的報告和文檔創(chuàng)建VCL庫。它提供了可視化模板設計器,可以訪問最受歡迎的數(shù)據(jù)源,報告引擎,預覽,將過濾器導出為30多種格式,并可以部署到云,Web,電子郵件和打印中。
近日,F(xiàn)astReport VCL更新至v6.9,在新版本中,在PDF導出中增加了對以下對象的交互式表單支持:文本,復選框和圖片。能夠通過InteractiveFormsFontSubset屬性將所需的字形僅包含在交互式形式中。同時修復了多個Bug問題。歡迎下載體驗。(點擊下方按鈕下載)
在交互式報表中,可以定義對鼠標單擊預覽窗口中任何報表對象的反應。例如,用戶可以單擊數(shù)據(jù)行,從而運行包含所選行的詳細數(shù)據(jù)的新報告。
任何報告都可以互動。為此,您只需要創(chuàng)建一個TfrxReport.OnClickObject事件處理程序。以下是此處理程序的代碼示例:
Pascal:
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;C ++:
void __fastcall TForm1::frxReport1ClickObject(TfrxView *Sender, TMouseButton Button, TShiftState Shift, bool &Modified) { TfrxMemoView * Memo; if(Memo = dynamic_cast <TfrxMemoView *> (Sender)) { if(Memo->Name == "Memo1") ShowMessage("Memo1 contents:\n\r" + Memo->Text); if(Memo->Name == "Memo2") { Memo->Text = InputBox("Edit", "Edit Memo2 text:", Memo->Text); Modified = true; } } }在OnClickObject處理程序中,您可以執(zhí)行以下操作:
- 修改傳遞給處理程序的對象或頁面的內(nèi)容(因此,應指定“ Modified”標志,以便將修改內(nèi)容考慮在內(nèi));
- 調(diào)用TfrxReport.PrepareReport用于重建/重建報告的方法。
同樣,可以為點擊定義不同的反應。例如,它可以運行新報告。有必要注意以下幾點。一個TfrxReport組件只能在預覽窗口中顯示一個報告。這就是為什么應該在單獨的TfrxReport對象中或在同一對象中運行報表,但是必須刪除當前報表的原因。
為了向最終用戶提供有關可點擊對象的提示,我們可以在鼠標光標經(jīng)過預覽窗口中的可點擊對象時對其進行修改。為此,請在報表設計器中選擇所需的對象,并將其cursor屬性設置為crDefault以外的其他值。
另一個細節(jié)涉及定義可點擊對象。在簡單的報表中,可以在對象的名稱或其內(nèi)容中定義它。但是,這并不總是在更復雜的情況下執(zhí)行。例如,應在選定的數(shù)據(jù)行中創(chuàng)建詳細的報告。用戶單擊內(nèi)容為“ 12”的?Memo1?對象。該對象指的是什么數(shù)據(jù)線?這就是為什么您應該知道主鍵,它清楚地標識了這一行的原因。FastReport可以為每個報表的對象分配一個字符串,其中包含任何數(shù)據(jù)(在本例中為主鍵的數(shù)據(jù))。此字符串存儲在TagStr屬性中。
讓我們通過一個報告示例來說明此過程,該示例包含在FastReportDemo.exe-“簡單列表”演示中。這是公司的客戶列表,其中包含諸如“客戶名稱”,“地址”,“聯(lián)系人”等數(shù)據(jù)。數(shù)據(jù)源是DBDEMOS演示數(shù)據(jù)庫中的“ Customer.db”表。該表具有一個主鍵,即?CustNo?字段,該字段未在報告中顯示。我們的任務是通過單擊完成的報告中的任何對象來確定其引用的記錄,這意味著獲取主鍵的值。為此,只需TagStr在“主數(shù)據(jù)”區(qū)域中的所有對象的屬性中輸入以下值:
[Customers."CustNo"]在報表的構建過程中,TagStr屬性的內(nèi)容的計算方法與文本對象的內(nèi)容計算方法相同;這意味著將用變量的值代替所有變量。在這種特殊情況下,變量是括在方括號中的變量。這就是為什么TagStr在創(chuàng)建報表后,“ 1005”,“ 2112”等類型的行將包含在主數(shù)據(jù)上的對象的屬性中的原因。從字符串到整數(shù)的簡單轉(zhuǎn)換將為我們提供主鍵的值,通過它可以找到所需的記錄。
如果主鍵是復合鍵(即它包含多個字段),則TagStr屬性的內(nèi)容可以如下:
[Table1."Field1"];[Table1."Field2"]構造報告后,該TagStr屬性包含“ 1000; 1”類型的值,從中獲取鍵的值也不難。
還想要更多嗎?您可以點擊閱讀【FastReport 報表2020最新資源盤點】,查找需要的教程資源。讓人興奮的是FastReport .NET正在慧都網(wǎng)火熱銷售中!在線訂購惠享超低折扣。>>查看價格詳情