收藏 分享(赏)

第二十一章 C++ Builder QReport报表程式开发.ppt

上传人:scg750829 文档编号:7273085 上传时间:2019-05-12 格式:PPT 页数:52 大小:559.50KB
下载 相关 举报
第二十一章  C++ Builder QReport报表程式开发.ppt_第1页
第1页 / 共52页
第二十一章  C++ Builder QReport报表程式开发.ppt_第2页
第2页 / 共52页
第二十一章  C++ Builder QReport报表程式开发.ppt_第3页
第3页 / 共52页
第二十一章  C++ Builder QReport报表程式开发.ppt_第4页
第4页 / 共52页
第二十一章  C++ Builder QReport报表程式开发.ppt_第5页
第5页 / 共52页
点击查看更多>>
资源描述

1、第二十一章QReport報表程式開發,報表程式能把程式的執行結果轉成報表的形式透過印表機進行輸出,是很多應用程式不可或缺的功能,而透過C+ Builder提供的報表開發元件能大幅簡化這類程式的開發過程,但卻不因此而喪失其功能性,透過本章的說明,相信開發報表程式對你(妳)將不再是個難題。,大綱,21-1 淺談QReport 21-2 QuickRep元件 21-3 條列式報表程式 21-4 圖案式報表程式 21-5 標籤式報表程式 21-6 合成式報表程式 21-7 報表進階技巧,21-1. 淺談QReport,在C+ Builder中的報表以帶狀的概念來呈現整份文件,而這些帶狀的內容分別對應到

2、一般熟悉的報表格式,包括頁首、標題、內容、頁尾等部分。底下為文件格式和C+ Builder中各帶狀間的對應關係描述。,21-1. 淺談QReport,對應到的帶狀則如下所列:,21-1. 淺談QReport,21-1. 淺談QReport,實際編輯的帶狀畫面則如下圖所示,圖中各顏色的帶狀分別對應了上表不同的帶狀名稱,而畫面中的顏色純粹只供方便顯示之用。,rbPageHeader,rbTitle,rbColumnHeader,rbGroupHeader,rbDetail,rbGroupFooter,rbSummary,rbPageFooter,21-1. 淺談QReport,上圖中如此多樣的帶狀

3、設定其實是個別分開的,也就是每個不同的帶狀各自為一個VCL元件,放置在一個稱為QuickRep的元件上,而該元件才真正代表一份文件,不過QuickRep元件並沒有要求就所有的帶狀內容進行設定,因此你可以根據實際使用情形來決定帶狀使用的種類與數目。 當設定好報表使用的帶狀類型後,還必須設定每個帶狀所要顯示的內容,而這些內容的顯示亦必須透過其他Quick Report的顯示元件來達成,就像一張空白的表單必須加上Label、Edit、Memo或是Image等元件才能顯示其他資料,報表程式最常使用到的元件不外乎QRLabel、QRDBText、QRSysData等,每個元件同樣可就顯示位置、字型或顏色

4、等屬性進行設定,部分元件的功能說明如下表所示。,21-1. 淺談QReport,21-1. 淺談QReport,這些元件均位在元件樣版中的QReport頁次。,21-2. QuickRep元件,前一節中簡單的介紹了報表的運作方式和C+ Builder提供的報表相關元件,其中QuickRep元件用來表示整份報表,而其他帶狀元件或顯示元件皆置於QuickRep元件之上,由此可了解QuickRep元件在報表程式中的重要性,而其提供的屬性和方法自然也直接影響到報表輸出的方法和形式,因此,我們獨立一個小節來專門說明QuickRep元件。,21-2-1. 常用屬性,21-2-1. 常用屬性,21-2-1.

5、 常用屬性,除了上述屬性設定外,還可就報表的輸出格式進行設定。請先拖拉QuickRep元件至表單上,並在QuickRep元件內單按滑鼠右鍵點選【Report Settings】進行設定,操作方式如下圖所示:,21-2-1. 常用屬性,而Report Settings對話框的設定畫面則如下所示:,21-2-1. 常用屬性,21-2-2. 常用方法,ExportToFilter 利用該方法的呼叫轉換報表文件成不同的格式輸出,包括HTML、TXT、CSV和xls等,其中轉換HTML格式範例如下,詳細說明請參考21-7小節的介紹。,21-2-2. 常用方法,NewPage 強迫換頁列印,若是你想在每筆

6、資料列印完後強迫換頁,可在TQRBand的AfterPrint或是BeforeBand事件中加上NewPage換行指令。 NewColumn 和NewPage方法同樣也是換頁的效果,不過卻改以欄位為換頁基準,也就是在換頁的同時亦會顯示欄位標頭的內容,底下以列印結果說明NewColumn和NewPage方法間的差異。,NewColumn的換頁,NewPage的換頁 (沒有欄位標題),21-2-2. 常用方法,Preview和PreviewModel 兩方法的功用皆為產生預覽視窗,不同的是:Preview產生的視窗並非Modal Window,也就是可在未關閉該視窗情況下變換作用中的視窗,但必須關

7、閉該預覽視窗後才能繼續執行後面的程式內容;反之,ShowModal即為Modal Window,不允許在未關閉該預覽視窗前變更作用中的視窗。兩者的差別類似於開啟表單的Show和ShowModal兩方法。 PrinterSetup 開啟印表機的設定對話框,類似對PrinterSettings屬性的設定。 Print 把產生的報表內容傳至印表機並輸出。,21-2-3. 常用事件,最後,由於QuickRep是透過Print、Preview或PreviewModal等方法的呼叫來呈現報表格式的內容,而非像一般的VCL元件是藉助表單來直接顯示,所以一般皆是利用額外的表單來放置報表元件,再對該表單內Qui

8、ckRep元件的方法(Print、Preview和PreviewModal等)進行呼叫達成顯示的目的,因此,最基本的報表專案程式皆會有兩個表單,其中的主表單為程式執行時的顯示畫面,副表單則包含QuickRep報表相關元件供主表單呼叫之用。往後的操作實例中皆會看到這樣的應用。,21-3. 條列式報表程式,在對報表元件稍有概念後,本小節將以實例操作的方式說明如何製作一個條列式報表程式,而這類報表也是一般最常使用到的列印方式。簡單來說就是從資料集合內逐筆的讀取資料並顯示在報表內。 【操作實例21-1】條列式報表程式 透過BDE連結方式讀取employee.db範例資料表的內容,並產生對應的報表程式。

9、,21-3. 條列式報表程式,開啟新專案,在表單中(表單名稱為Form1,程式碼為Main.cpp)新增Table、DataSource、DBGrid和Button元件如下圖所示,重要屬性如下表所列。,21-3. 條列式報表程式,新增一個表單(表單名稱為Form2,程式碼為Report.cpp)並拖拉QuickRep元件至該表單中,接著雙擊該QuickRep元件就報表格式進行設定。在設定對話框中我們勾取Title、Columnheader和DetailBand三種帶狀格式選項,如下圖所示。,設定完成後的報表編輯畫面,21-3. 條列式報表程式,由於報表程式的資料來源為Form1中的Table1

10、,請在Report.h中加入#include “Main.h”程式片段以便QRDBText能讀取Form1中的Table1元件。,21-3. 條列式報表程式,新增報表內顯示元件。此程式使用的報表顯示元件有QRLabel和QRDBText兩種,其中QRLable元件單純顯示文字內容;QRDBText元件則從資料集合內的指定欄位讀取資料,報表編輯畫面如下所示:,21-3. 條列式報表程式,回到Form1表單設定按鈕對應的程式碼如下,並在Form1所屬的Main.h中加入#include “Report.h“程式碼。,21-3. 條列式報表程式,執行程式後按下按鈕即可看到報表畫面。 【執行結果】,2

11、1-3. 條列式報表程式,【實例說明】 本例主要以ColumnHeader和DetailBand的搭配來達到條列式輸出的效果,雖然有點陽春,但只要對背景顏色、文字位置稍作調整即可讓畫面變的更美觀,而為了讓更改後的背景顏色不會與QRDBText或QRLabel的白色背景色衝突,亦可設定QRDBText或QRLabel的Transparent 屬性為True以達到背景色透明的效果。,21-4. 圖案式報表程式,在前一節中了解了報表的基本操作,本小節將更進一步的為報表加入顯示圖片的功能,而使用到的元件為QRDBImage,底下為操作實例的說明。 【操作實例21-2】圖案式報表 透過元件的使用製作一個

12、能顯示圖案內容的報表程式,而資料來源為C+ Builder提供的Biolife.db範例資料表。,21-4. 圖案式報表程式,開啟新專案,在表單中加入兩個按鈕和RadioGroup元件,除此,額外新增一個表單供報表製作之用,並在該新增表單中加入Table元件。表單和報表格式如下兩圖所示。,21-4. 圖案式報表程式,主表單的重要屬性設定如下:,報表表單的重要屬性設定如下:,21-4. 圖案式報表程式,在主表單(Form1)中加入對應事件的程式碼。(檔名為Main.cpp) 在Main.h中加入include程式碼。執行程式,根據RadioGroup的選取狀態呈現不同的報表效果。 【執行結果】,

13、21-4. 圖案式報表程式,【執行結果】 透過QRDBImage和QRDBRichText元件的使用,報表輸出的內容變得更多樣化:其中QRDEImage顯示圖檔;QRDBRichText顯示不限字數的長字串,由於這些格式皆不確定其內容大小,因此透過單純的拖拉並不能保證能完整顯示其內容,為此QRDBImage提供了Stretch屬性;QRDBRichText提供了AutoStretch屬性來確保內容能完整呈現,也就是說Stretch為true時,影像會根據QRDBImage元件所設定的大小來調整;AutoStretch為true時會自動調整QRDBRichText的大小以讓文字內容能完整輸出在報

14、表上,而本實例則透過選取屬性值的方式讓讀者實際了解屬性作用的差異。,21-5. 標籤式報表程式,所謂的標籤報表就是非單欄位的報表,以一張A4的輸出可能為3*4的形式,適合用於名片或是商品標籤的列印,因為這類東西本身的寬度均不及報表的一半,如果一列只印一份資料將造成紙張的浪費,所以才會考慮一列包含多份資料的內容以節省報表的長度,而在實際使用上,和前面小節介紹的報表僅在QuickRep屬性設定上略有差異。請看下面的操作實例說明。,21-5. 標籤式報表程式,【操作實例21-3】員工識別證的列印 從C+ Builder提供的employee.db資料表中讀取所有員工資料,以製作每位員工的識別證。 開

15、啟新專案,設定表單畫面如下顯示(表單名稱為Form1)。,21-5. 標籤式報表程式,新增一個表單並拖拉Table和QuickRep元件至該表單中,接著雙擊QuickRep元件以開啟報表設定對話框就報表格式進行設定,而設定內容則如右圖所示:在這裡我們點選了Page header和Detail hand兩個帶狀,並設定Number of columns為2。(表單名稱為Form2),21-5. 標籤式報表程式,按下上圖的【OK】按鈕以關閉對話框,接著編輯表單內容如下圖所示,重要屬性以下面表格呈現,而詳細屬性設定請參考書附光碟內的原始碼。,21-5. 標籤式報表程式,本步驟專門說明QRExpr的設

16、定方式。QRExpr為功能強大的報表顯示元件,不但能顯示資料集合內欄位,還可顯示QReport額外提供的函式計算結果與運算式結果,而在本操作實例中,我們將透過該元件來顯示兩個資料欄位的內容。首先請設定該元件的Master屬性為QuickRep1(這裡的QuickRep必須先設定好DataSet屬性為Table1,且Table1的Active必須為true),接著點選Expression屬性以彈出Expression Wizard對話框,並依照以下的圖解步驟設定Expression內容。,開啟Express Wizard,21-5. 標籤式報表程式,Expression Wizard設定步驟(如

17、游標所示),Step 1.,Step 2.,Step 3.,Step 4.,21-5. 標籤式報表程式,Step 5.,Step 6.,Step 7.,Step 8.,驗證,完成設定,21-5. 標籤式報表程式,回到主表單對應的程式檔(Main.cpp)中,加入各按鈕對應事件的程式片段,並在Main.h中加入Include的內容。Main.cpp, Main.h內容。 執行程式。 【執行結果】【實例說明】 本程式透過QuickRep的Report Settings內的Number of columns屬性達到標籤列印的效果,另外也介紹了功能強大的QRExpr元件使用方法,和能增添報表美觀的QR

18、Shape元件。,21-6. 合成式報表程式,前面範例中,一份報表的內容均為同一來源,但當內容來源變得複雜而不再是單一格式,或是一份報表是由多份報表組合而成時,前面的方法就顯的有點力不從心,此時,若能合成多份報表於一份時就可克服格式或來源不一的難題了,而本小節就將透過操作實例的說明來帶領讀者進入更複雜的報表世界。 【操作實例21-4】不同報表的合併輸出 透過QRCompositeReport元件的使用,我們合併【操作實例21-1】和【操作實例21-2】所介紹的報表於一張報表中。,21-6. 合成式報表程式,開啟新專案,設計主表單(表單名為Form1)畫面如下。新增表單Form2,並在該表單中設

19、定兩份報表QuickRep1和QuickRep2:其中QuickRep1參考【操作實例21-1】;QuickRep2參考【操作實例21-2】,兩表單的內容如下:,報表一,21-6. 合成式報表程式,報表二,21-6. 合成式報表程式,在Form2中新增QRCompositeReport元件,而該元件為本程式運作的靈魂中心:透過QRCompositeReport元件的Add方法把所有合成的報表加入QRCompositeReport中,也就是本程式中的QuickRep1和QuickRep。 在Form2表單中(Report.cpp和Report.h)編輯下列的程式碼。Report.h, Repor

20、t.cpp 在Form1中加入對應的程式碼。Main.h, Main.cpp 執行程式。,21-6. 合成式報表程式,【執行畫面】,報表一,報表二,主表單畫面,21-6. 合成式報表程式,【實例說明】 QRCompositeReport元件允許合併多個報表進行輸出,而所要合併的報表透過QRCompositeReport的Add方法加入到QRCompositeReport中,所以QRCompositeReport可視為一個特大號的報表元件,同樣也包含ReportTitle、PrinterSettings等屬性設定。執行列印的方法同樣為Print()和Preview(),而比較值得注意的是:Add

21、方法的呼叫必須在QRCompositeReport的OnAddReports事件中完成,另外,本程式亦在QuickRep2的BeforePrint事件中加入換頁的方法,以確保同時列印兩份報表時能有所區別,這些說明都可再上面程式碼中看到實際的用法。,21-7. 報表進階技巧,前面介紹的操作實例中,我們直接透過報表元件的Preview和Print方法進行列印的動作,雖然完成透過印表機輸出的目的,但卻無法對印表機的內容或是輸出的範圍進行設定,似乎仍稍嫌美中不足。因此,在本小節中我們將介紹如何透過列印對話框來對印表機的內容進行設定,這些設定內容包括:印表機選擇、列印範圍、列印份數等,另外,除了單純的紙

22、張輸出外,C+ Builder的報表元件還允許報表內容以HTML、TXT和CSV檔進行輸出,提供的更多樣的顯示彈性。,21-7. 報表進階技巧,【操作實例21-5】進階報表應用 對【操作實例21-1】的程式稍作修改,使其能對印表機的內容進行設定,並允許報表內容以HTML檔案呈現。 開啟【操作實例21-1】所介紹的專案,並修正主表單畫面如下,在畫面中,我們新增的一個按鈕和一個PrintDialog元件,其中PrintDialog元件負責列印對話框的顯示。,21-7. 報表進階技巧,在Form2(報表元件所在的表單)中新增QRHTMLFilter元件如下。該元件並不需要額外的屬性設定。修改主表單的

23、程式片段。Main.cpp 在Main.h中加入#include 的程式碼。,21-7. 報表進階技巧,執行程式。當按下【列印】按鈕後會彈出列印對話框供使用者就列印方式進行設定,而按下【HTML輸出】則直接產生HTML輸出檔。 【執行畫面】,主畫面,列印對話框,HTML格式輸出,21-7. 報表進階技巧,【執行畫面】 本實例利用PrintDialog顯示標準的列印對話框,而列印對話框中的設定則反映到QuickRep的PrinterSettings屬性中,進而影響報表的輸出,至於HTML檔案的輸出則透過QReport提供的轉換元件QRHTMLFilter元件來完成,而標準C+ Builder內附

24、的QReport還支援TXT(QRTextFilter)和CSV(QRCSVFilter)的轉換,其中CSV檔案可由Excel開啟,不過,轉換元件並不支援對QRRichText、QRDBRichText、QRShape、QRImage、QRDBImage元件的轉換。,本章習題,習題 QReport報表列印的基本元件為何?該元件以何種概念作為報表的輸出? 簡述QuickRep元件內各帶狀的功用。 簡述QuickRep元件內Preview和PreviewModal方法的不同。 試實作三份報表的合併輸出,其中每份報表亦允許單獨輸出。 試透過QRTextFilter元件將報表內容改以TXT檔案格式輸出。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报