在各種管理信息應用中,需要產生大量的報表,通常的做法是由編程人員一個個手工制作,工作效率較低;另外,用戶希望能夠將在應用程序裡查詢得到的結果生成報表以便打印。為了解決以上兩種問題,本文利用動態生成技術實現了快速自動產生報表,允許用戶手工對報表進行修飾,並將實現過程封裝成一個類。
1.設計思路
使用過C++ Builder或Delphi的編程人員知道,有一個TDBGrid控件,它能以表格的形式顯示和操作用戶查詢的數據記錄;而要制作一個可供打印的報表,則需要使用TQuickRep控件,在它上面增加TQRLabel、TQRDBText、TQRShape等控件,設置它們對應的數據集、數據字段等屬性,然後編排它們的位置,以表格或其它格式顯示出來供預覽和打印,這是一個很繁瑣的過程。有時,用戶希望能將查詢出來的顯示在TDBGrid控件的數據打印出來,按照以往的做法,就需要由編程人員按照TDBGrid的顯示內容手工設計報表。在這裡,本文利用動態生成技術,讀出TDBGrid的有關顯示信息,在TQuickRep控件裡動態生成相應的TQRLabel、TQRDBText、TQRShape等控件,設置各字段的標題和數據以及表格分割條。這是完全可行的,因為在C++ Builder裡所有的控件都可以由程序動態生成,不僅僅是在設計階段才產生的。另外,如果用戶對產生的報表表格布局不太滿意,本文提供了接口使用戶可對報表進行手工調整,調整表格的高度、寬度等布局,實現用戶對報表的一定程度的定制。
利用C++的封裝性特點,將自動產生並定制報表的實現封裝成一個新類TGridPrint,對外提供編程人員關心的公用接口,屏蔽了內部信息和具體實現,體現了面向對象的設計思想,為編程人員帶來方便。編程人員還可以在它基礎上進一步擴充功能。這樣設計的新類減輕了編程人員的工作量,同時為用戶提供了定制報表的接口,提高了報表的質量和用戶參與的積極性。