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