在各种管理信息系统应用中,需要产生大量的报表,通常的做法是由编程人员一个个手工制作,工作效率较低;另外,用户希望能够将在应用程序里查询得到的结果生成报表以便打印。为了解决以上两种问题,本文利用动态生成技术实现了快速自动产生报表,允许用户手工对报表进行修饰,并将实现过程封装成一个类。
1.设计思路
使用过C++ Builder或Delphi的编程人员知道,有一个TDBGrid控件,它能以表格的形式显示和操作用户查询的数据记录;而要制作一个可供打印的报表,则需要使用TQuickRep控件,在它上面增加TQRLabel、TQRDBText、TQRShape等控件,设置它们对应的数据集、数据字段等属性,然后编排它们的位置,以表格或其它格式显示出来供预览和打印,这是一个很繁琐的过程。有时,用户希望能将查询出来的显示在TDBGrid控件的数据打印出来,按照以往的做法,就需要由编程人员按照TDBGrid的显示内容手工设计报表。在这里,本文利用动态生成技术,读出TDBGrid的有关显示信息,在TQuickRep控件里动态生成相应的TQRLabel、TQRDBText、TQRShape等控件,设置各字段的标题和数据以及表格分割条。这是完全可行的,因为在C++ Builder里所有的控件都可以由程序动态生成,不仅仅是在设计阶段才产生的。另外,如果用户对产生的报表表格布局不太满意,本文提供了接口使用户可对报表进行手工调整,调整表格的高度、宽度等布局,实现用户对报表的一定程度的定制。
利用C++的封装性特点,将自动产生并定制报表的实现封装成一个新类TGridPrint,对外提供编程人员关心的公用接口,屏蔽了内部信息和具体实现,体现了面向对象的设计思想,为编程人员带来方便。编程人员还可以在它基础上进一步扩充功能。这样设计的新类减轻了编程人员的工作量,同时为用户提供了定制报表的接口,提高了报表的质量和用户参与的积极性。