- 在线时间
- 0 小时
- 最后登录
- 2007-9-23
- 注册时间
- 2004-9-10
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 9975 点
- 威望
- 7 点
- 阅读权限
- 150
- 积分
- 4048
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1893
- 主题
- 823
- 精华
- 2
- 分享
- 0
- 好友
- 0

我的地盘我做主
该用户从未签到
|
<b><FONT face=宋体 size=6> </FONT></b>< align=center>实现简单的数据报表</P><FONT face=宋体 size=3>< align=justify>在前两讲中我们已经学习了对数据库进行查询和读写操作的基本方法,本讲中我们将为</FONT><FONT face="宋体, MS Song" size=3>MP3Collect</FONT><FONT face=宋体 size=3>小程序添加另一项与数据库操作有关的新功能:数据报表打印功能。</P>< align=justify>打印数据报表是开发数据库类应用程序过程中经常遇到的问题,特别是在商务类的应用软件中,单位领导或者客户关心的不仅仅是显示在计算机屏幕上的数据,更重要的是打印出来的整齐清晰的报表。</P>< align=justify>设计一个好的数据报表应该遵循这样几个原则:首先要了解用户需要得到什么样的数据,数据库中的记录可能有成千上万条,打印出来的应该是经过提炼、精简的,其中将涉及到数据库的查询、统计、分组、排序等操作;第二个要点是关于报表的布局设计,其设计原则是整齐有序、美观大方,在某些应用场合,如财会类的应用软件中,报表的设计需要遵循固定的格式。第三点是将数据与报表结合起来,实现数据报表的生成与打印。</P><UL><B>< align=justify><LI>使用数据报表向导
8 l, A; g8 L4 ^; |</LI></UL></B>< align=justify>从前面的介绍中我们可以看出,实现数据报表的功能还是颇为复杂的。好在</FONT><FONT face="宋体, MS Song" size=3>CBuilder</FONT><FONT face=宋体 size=3>充分考虑到了数据报表的重要性,在其集成开发环境中提供了许多现成的数据报表控件,因此大大方便了数据报表的设计与实现。另外,</FONT><FONT face="宋体, MS Song" size=3>CBuilder</FONT><FONT face=宋体 size=3>还提供有专门的数据报表向导,利用向导可以在几分钟内完成一个简单的数据报表的设计。</P>< align=justify>下面我们首先学习如何使用</FONT><FONT face="宋体, MS Song" size=3>CBuilder</FONT><FONT face=宋体 size=3>的数据报表向导。在</FONT><FONT face="宋体, MS Song" size=3>MP3Collect</FONT><FONT face=宋体 size=3>工程中使用菜单命令“</FONT><FONT face="宋体, MS Song" size=3>File->New...</FONT><FONT face=宋体 size=3>”,在弹出的新建对象对话框中选择“</FONT><FONT face="宋体, MS Song" size=3>Business</FONT><FONT face=宋体 size=3>”页,并双击其中的“</FONT><FONT face="宋体, MS Song" size=3>Quick Report Wizard</FONT><FONT face=宋体 size=3>”图标。这时会弹出如图</FONT><FONT face="宋体, MS Song" size=3>17-1</FONT><FONT face=宋体 size=3>所示的新数据报表向导对话框,在其中选择报表的样式为“</FONT><FONT face="宋体, MS Song" size=3>List Report</FONT><FONT face=宋体 size=3>”,然后按下“</FONT><FONT face="宋体, MS Song" size=3>Start Wizard</FONT><FONT face=宋体 size=3>”按钮启动向导。</P>< align=justify>向导接下来会显示如图</FONT><FONT face="宋体, MS Song" size=3>17-2</FONT><FONT face=宋体 size=3>所示的参数设置对话框。“</FONT><FONT face="宋体, MS Song" size=3>Alias or directory</FONT><FONT face=宋体 size=3>”一栏用于指定数据库,我们在下拉列表框中选择数据库别名</FONT><FONT face="宋体, MS Song" size=3>MP3Collect</FONT><FONT face=宋体 size=3>。“</FONT><FONT face="宋体, MS Song" size=3>Table Name</FONT><FONT face=宋体 size=3>”一栏用于指定表,我们选择</FONT><FONT face="宋体, MS Song" size=3>MP3Info</FONT><FONT face=宋体 size=3>。这时,数据表</FONT><FONT face="宋体, MS Song" size=3>MP3Info</FONT><FONT face=宋体 size=3>中的四个字段</FONT><FONT face="宋体, MS Song" size=3>ID</FONT><FONT face=宋体 size=3>、</FONT><FONT face="宋体, MS Song" size=3>FileName</FONT><FONT face=宋体 size=3>、</FONT><FONT face="宋体, MS Song" size=3>SongName</FONT><FONT face=宋体 size=3>、</FONT><FONT face="宋体, MS Song" size=3>SingerName</FONT><FONT face=宋体 size=3>自动出现在</FONT><FONT face="宋体, MS Song" size=3>Avaliable fields</FONT><FONT face=宋体 size=3>(可用的字段)列表框中,它的右侧是</FONT><FONT face="宋体, MS Song" size=3>Selected fields</FONT><FONT face=宋体 size=3>(选中的字段)列表框,两个列表框中间有四个箭头按钮,用来在两个列表框之间移动字段。在本例中我们只希望打印歌曲名称和歌手名称两项内容,因此将</FONT><FONT face="宋体, MS Song" size=3>SongName</FONT><FONT face=宋体 size=3>、</FONT><FONT face="宋体, MS Song" size=3>SingerName</FONT><FONT face=宋体 size=3>两个字段选入</FONT><FONT face="宋体, MS Song" size=3>Selected fields</FONT><FONT face=宋体 size=3>列表框。设置好显示的数据内容后,按下“</FONT><FONT face="宋体, MS Song" size=3>Finish</FONT><FONT face=宋体 size=3>”按钮,创建报表完毕,这时我们可以看到,工程中新添了一个报表窗体</FONT><FONT face="宋体, MS Song" size=3>Form1</FONT><FONT face=宋体 size=3>,如图</FONT><FONT face="宋体, MS Song" size=3>17-3</FONT><FONT face=宋体 size=3>所示,该窗体上的各个控件的用途及使用方法在下一节中详细介绍。现在我们先来看一下报表窗体运行的效果,用鼠标右键单击窗体中的空白部分,在关联菜单中选择</FONT><FONT face="宋体, MS Song" size=3> review</FONT><FONT face=宋体 size=3>命令,可以对报表进行打印预览,如图</FONT><FONT face="宋体, MS Song" size=3>17-4</FONT><FONT face=宋体 size=3>所示。打印预览是以所见即所得的方式显示报表输出到打印机的效果,在预览窗口的上方有一排快捷按钮,可以进行切换预览方式、浏览不同的页面等操作,其中还有两个打印机形状的按钮,一个用于设置打印机,另一个则是执行打印命令,完成向打印机的输出。预览完毕后可以点击工具条上的</FONT><FONT face="宋体, MS Song" size=3>Close</FONT><FONT face=宋体 size=3>按钮关闭预览窗口。</P>< align=justify>从这个例子中我们可以看出,使用报表向导来创建报表时,只需要指定数据库、数据表、报表中输出的字段名,就可以生成一个简单的数据报表。下面我们就来仔细了解一下报表窗体上的各个组成部分,并在向导生成的报表基础上稍加修改,使之更加满足我们的要求。</P><UL><B>< align=justify><LI>常用的数据报表元件 <p></LI></UL></B>< align=justify>图</FONT><FONT face="宋体, MS Song" size=3>17-3</FONT><FONT face=宋体 size=3>所示的数据报表窗体中,</FONT><FONT face="宋体, MS Song" size=3>TTable</FONT><FONT face=宋体 size=3>控件</FONT><FONT face="宋体, MS Song" size=3>Table1</FONT><FONT face=宋体 size=3>是我们所熟悉的,它指向</FONT><FONT face="宋体, MS Song" size=3>MP3Collect</FONT><FONT face=宋体 size=3>数据库中的</FONT><FONT face="宋体, MS Song" size=3>MP3Info</FONT><FONT face=宋体 size=3>数据表,其作用是提供打印报表所需要的数据。窗体上的其它控件都属于</FONT><FONT face="宋体, MS Song" size=3>QuickReport</FONT><FONT face=宋体 size=3>控件。</FONT><FONT face="宋体, MS Song" size=3>QuickReport</FONT><FONT face=宋体 size=3>是由</FONT><FONT face="宋体, MS Song" size=3>QuSoft AS</FONT><FONT face=宋体 size=3>公司开发的第三方软件产品,它以一组元件的形式集成在</FONT><FONT face="宋体, MS Song" size=3>CBuilder</FONT><FONT face=宋体 size=3>中,能够帮助</FONT><FONT face="宋体, MS Song" size=3>CBuilder</FONT><FONT face=宋体 size=3>编程人员以可视化的方法快速开发数据报表应用程序,目前</FONT><FONT face="宋体, MS Song" size=3>CBuilder 5.0</FONT><FONT face=宋体 size=3>中采用的是</FONT><FONT face="宋体, MS Song" size=3>QuickReport 3.0</FONT><FONT face=宋体 size=3>版本。</P>< align=justify>在元件面板中找到</FONT><FONT face="宋体, MS Song" size=3>QReport</FONT><FONT face=宋体 size=3>元件栏,我们可以看到其中包含了二十几个元件,利用这些元件,可以使报表输出各种类型的数据,如图像、图形、数值、文本、</FONT><FONT face="宋体, MS Song" size=3>HTML</FONT><FONT face=宋体 size=3>格式的文本等,并控制报表各个部分的输出效果,如大小、字体、颜色、对齐方式等。在设计报表时我们会发现,设计报表和设计程序窗体十分相似,报表中常用的一些元件,如</FONT><FONT face="宋体, MS Song" size=3>TQRLabel</FONT><FONT face=宋体 size=3>、</FONT><FONT face="宋体, MS Song" size=3>TQRMemo</FONT><FONT face=宋体 size=3>等元件与普通的窗体元件如</FONT><FONT face="宋体, MS Song" size=3>TLabel</FONT><FONT face=宋体 size=3>、</FONT><FONT face="宋体, MS Song" size=3>TMemo</FONT><FONT face=宋体 size=3>等在名称和用途上也有一定的对应关系。报表元件与普通窗体元件之间的最重要的差别在于:普通窗体元件具有与用户交互的功能,它们能够接收用户的输入,而报表元件则只是负责输出,输出的结果可能是在打印机上(如果选择了打印报表操作)也可能是在屏幕上(如果选择了打印预览操作)。</P>< align=justify>在</FONT><FONT face="宋体, MS Song" size=3>QuickReport</FONT><FONT face=宋体 size=3>元件组中,最重要的元件是</FONT><FONT face="宋体, MS Song" size=3>TQuickRep</FONT><FONT face=宋体 size=3>控件,它是实现报表的基础,可以控制报表的生成和打印,它还是其它</FONT><FONT face="宋体, MS Song" size=3>QuickReport</FONT><FONT face=宋体 size=3>控件的容器,因此</FONT><FONT face="宋体, MS Song" size=3>TQuickRep</FONT><FONT face=宋体 size=3>是在</FONT><FONT face="宋体, MS Song" size=3>CBuilder</FONT><FONT face=宋体 size=3>中实现数据报表功能必不可少的控件。在向导生成的</FONT><FONT face="宋体, MS Song" size=3>Form1</FONT><FONT face=宋体 size=3>窗体中,我们可以看到,</FONT><FONT face="宋体, MS Song" size=3>TQuickRep</FONT><FONT face=宋体 size=3>控件对象</FONT><FONT face="宋体, MS Song" size=3>QuickRep1</FONT><FONT face=宋体 size=3>为一个白色背景、带有网格和标尺的矩形。该矩形充满整个窗体的客户区,它代表的是打印输出的纸张大小,</FONT><FONT face="宋体, MS Song" size=3>QuickRep1</FONT><FONT face=宋体 size=3>内部有一个蓝色虚线的方框,表示可打印区域。在可打印区域内部,我们可以看到用黑色虚线框起的三个长条形区域,每一个长条形区域称为一个</FONT><FONT face="宋体, MS Song" size=3>Band</FONT><FONT face=宋体 size=3>。不同的</FONT><FONT face="宋体, MS Song" size=3>Band</FONT><FONT face=宋体 size=3>将</FONT><FONT face="宋体, MS Song" size=3>TQuickRep</FONT><FONT face=宋体 size=3>控件内部分为不同的区域,例如标题栏区(</FONT><FONT face="宋体, MS Song" size=3>Title</FONT><FONT face=宋体 size=3>)用于显示报表的标题,如果报表由多页组成,则只显示在第一页上;列标题栏区(</FONT><FONT face="宋体, MS Song" size=3>ColumnHeader</FONT><FONT face=宋体 size=3>)显示列标题,如果报表由多页组成,它会显示在每一页的表格上方;明细栏区(</FONT><FONT face="宋体, MS Song" size=3>Detail</FONT><FONT face=宋体 size=3>)则显示具体的数据,虽然在设计阶段只显示了一行内容,但在输出时会根据实际记录的数量显示出多行来,形成一个表格。</FONT><FONT face="宋体, MS Song" size=3>TQuickRep</FONT><FONT face=宋体 size=3>控件中定义了六种</FONT><FONT face="宋体, MS Song" size=3>Band</FONT><FONT face=宋体 size=3>区域,除了刚才提到的三种,还有页眉栏(</FONT><FONT face="宋体, MS Song" size=3> ageHeader</FONT><FONT face=宋体 size=3>)、页脚栏(</FONT><FONT face="宋体, MS Song" size=3> ageFooter</FONT><FONT face=宋体 size=3>)、合计栏(</FONT><FONT face="宋体, MS Song" size=3>Summary</FONT><FONT face=宋体 size=3>),</FONT><FONT face="宋体, MS Song" size=3>TQuickRep</FONT><FONT face=宋体 size=3>控件的</FONT><FONT face="宋体, MS Song" size=3>Bands</FONT><FONT face=宋体 size=3>属性决定了显示哪些</FONT><FONT face="宋体, MS Song" size=3>Band</FONT><FONT face=宋体 size=3>区域。</FONT><FONT face="宋体, MS Song" size=3>TQuickRep</FONT><FONT face=宋体 size=3>控件的属性</FONT><FONT face="宋体, MS Song" size=3>DataSet</FONT><FONT face=宋体 size=3>属性决定了它与自己内部的其它报表控件的数据来源。与前两讲介绍的数据访问控件不同的是,数据报表控件可以直接从</FONT><FONT face="宋体, MS Song" size=3>TDataSet</FONT><FONT face=宋体 size=3>类的控件中获取数据,而不需要</FONT><FONT face="宋体, MS Song" size=3>TDataSource</FONT><FONT face=宋体 size=3>控件作为中转。</P>< align=justify>在本例中,</FONT><FONT face="宋体, MS Song" size=3>QuickRep1</FONT><FONT face=宋体 size=3>的</FONT><FONT face="宋体, MS Song" size=3>DataSet</FONT><FONT face=宋体 size=3>属性设为</FONT><FONT face="宋体, MS Song" size=3>Table1</FONT><FONT face=宋体 size=3>,表示数据来源为</FONT><FONT face="宋体, MS Song" size=3>MP3Collect</FONT><FONT face=宋体 size=3>数据库中的</FONT><FONT face="宋体, MS Song" size=3>MP3Info</FONT><FONT face=宋体 size=3>数据表。除了上述属性之外,</FONT><FONT face="宋体, MS Song" size=3>TQuickRep</FONT><FONT face=宋体 size=3>控件的其它重要属性还包括有</FONT><FONT face="宋体, MS Song" size=3>Frame</FONT><FONT face=宋体 size=3>、</FONT><FONT face="宋体, MS Song" size=3>Options</FONT><FONT face=宋体 size=3>、</FONT><FONT face="宋体, MS Song" size=3> age</FONT><FONT face=宋体 size=3>、</FONT><FONT face="宋体, MS Song" size=3> rintSettings</FONT><FONT face=宋体 size=3>等等,其中</FONT><FONT face="宋体, MS Song" size=3>Frame</FONT><FONT face=宋体 size=3>属性定义了报表的四周是否有边框,以及边框的样式(大部分</FONT><FONT face="宋体, MS Song" size=3>QuickReport</FONT><FONT face=宋体 size=3>报表控件都有</FONT><FONT face="宋体, MS Song" size=3>Frame</FONT><FONT face=宋体 size=3>属性,用于定义边框),</FONT><FONT face="宋体, MS Song" size=3>Options</FONT><FONT face=宋体 size=3>属性定义了一些用于显示的选项,</FONT><FONT face="宋体, MS Song" size=3> age</FONT><FONT face=宋体 size=3>属性定义了打印纸张的大小、纸型、页边距等,该属性和输出打印机的设置有关,</FONT><FONT face="宋体, MS Song" size=3> rintSettings</FONT><FONT face=宋体 size=3>属性则定义了打印的范围、打印的份数等参数。</P>< align=justify>在</FONT><FONT face="宋体, MS Song" size=3>TQuickRep</FONT><FONT face=宋体 size=3>控件中,需要显示的</FONT><FONT face="宋体, MS Song" size=3>Band</FONT><FONT face=宋体 size=3>区域自动显示为</FONT><FONT face="宋体, MS Song" size=3>TQuickRep</FONT><FONT face=宋体 size=3>控件内部的一个黑色虚线矩形,该矩形实际上是一个</FONT><FONT face="宋体, MS Song" size=3>TQRBand</FONT><FONT face=宋体 size=3>控件。</FONT><FONT face="宋体, MS Song" size=3>TQRBand</FONT><FONT face=宋体 size=3>控件封装了报表中不同</FONT><FONT face="宋体, MS Song" size=3>Band</FONT><FONT face=宋体 size=3>区域的属性和方法,其属性</FONT><FONT face="宋体, MS Song" size=3>BandType</FONT><FONT face=宋体 size=3>决定了该</FONT><FONT face="宋体, MS Song" size=3>Band</FONT><FONT face=宋体 size=3>区域的类型。</FONT><FONT face="宋体, MS Song" size=3>QuickRep1</FONT><FONT face=宋体 size=3>中的三个</FONT><FONT face="宋体, MS Song" size=3>Band</FONT><FONT face=宋体 size=3>对象的类型分别为</FONT><FONT face="宋体, MS Song" size=3>rbColumnHeader</FONT><FONT face=宋体 size=3>、</FONT><FONT face="宋体, MS Song" size=3>rbDetail</FONT><FONT face=宋体 size=3>和</FONT><FONT face="宋体, MS Song" size=3>rbPageFooter</FONT><FONT face=宋体 size=3>。</FONT><FONT face="宋体, MS Song" size=3>TQRBand</FONT><FONT face=宋体 size=3>控件可以用来控制各个栏目区域的大小和位置,例如,如果我们加大</FONT><FONT face="宋体, MS Song" size=3>DetailBand1</FONT><FONT face=宋体 size=3>的高度,就可以加大报表表格中行的间距,利用</FONT><FONT face="宋体, MS Song" size=3>TQRBand</FONT><FONT face=宋体 size=3>控件对象还可以实现其它一些显示上的特殊效果,朋友们可以多试一试各种不同设置的效果。不过心铃认为</FONT><FONT face="宋体, MS Song" size=3>TQRBand</FONT><FONT face=宋体 size=3>对象的主要作用应该是作为其它报表控件的容器。</P>< align=justify>前面已经说过,报表</FONT><FONT face="宋体, MS Song" size=3>QuickRep1</FONT><FONT face=宋体 size=3>被划分为三个</FONT><FONT face="宋体, MS Song" size=3>Band</FONT><FONT face=宋体 size=3>区域,分别是列标题区</FONT><FONT face="宋体, MS Song" size=3>ColumnHeaderBand1</FONT><FONT face=宋体 size=3>、明细区</FONT><FONT face="宋体, MS Song" size=3>DetailBand1</FONT><FONT face=宋体 size=3>和页脚区</FONT><FONT face="宋体, MS Song" size=3> ageFooterBand1</FONT><FONT face=宋体 size=3>。</P>< align=justify>列标题区</FONT><FONT face="宋体, MS Song" size=3>ColumnHeaderBand1</FONT><FONT face=宋体 size=3>内包括两个</FONT><FONT face="宋体, MS Song" size=3>TQRLabel</FONT><FONT face=宋体 size=3>控件,分别显示“</FONT><FONT face="宋体, MS Song" size=3>SongName</FONT><FONT face=宋体 size=3>”和“</FONT><FONT face="宋体, MS Song" size=3>SingerName</FONT><FONT face=宋体 size=3>”两个字符串。</FONT><FONT face="宋体, MS Song" size=3>TQRLabel</FONT><FONT face=宋体 size=3>控件用于显示固定的文本字符串,它在报表中作用与</FONT><FONT face="宋体, MS Song" size=3>Label</FONT><FONT face=宋体 size=3>控件在普通窗体中的作用是相似的(注意不要在报表中使用普通窗体控件,它们不会在预览或打印结果中显示出来)。</FONT><FONT face="宋体, MS Song" size=3>TQRLabel</FONT><FONT face=宋体 size=3>控件的属性也很好理解,与普通</FONT><FONT face="宋体, MS Song" size=3>Label</FONT><FONT face=宋体 size=3>控件相比,它多了一个</FONT><FONT face="宋体, MS Song" size=3>Frame</FONT><FONT face=宋体 size=3>复合属性,该属性定义了字符串的四周是否显示边框,以及边框的样式等。“</FONT><FONT face="宋体, MS Song" size=3>SongName</FONT><FONT face=宋体 size=3>”和“</FONT><FONT face="宋体, MS Song" size=3>SingerName</FONT><FONT face=宋体 size=3>”两个</FONT><FONT face="宋体, MS Song" size=3>TQRLabel</FONT><FONT face=宋体 size=3>对象的</FONT><FONT face="宋体, MS Song" size=3>Frame</FONT><FONT face=宋体 size=3>属性中就定义为显示下边框,因此我们在预览效果(图</FONT><FONT face="宋体, MS Song" size=3>17-4</FONT><FONT face=宋体 size=3>)中可以看到列标题下方有一根直线把列标题与报表明细内容区分开来。</P>< align=justify>明细区</FONT><FONT face="宋体, MS Song" size=3>DetailBand1</FONT><FONT face=宋体 size=3>包含两个</FONT><FONT face="宋体, MS Song" size=3>TQRExpr</FONT><FONT face=宋体 size=3>对象</FONT><FONT face="宋体, MS Song" size=3>QRExpr2</FONT><FONT face=宋体 size=3>和</FONT><FONT face="宋体, MS Song" size=3>QRExpr3</FONT><FONT face=宋体 size=3>。</FONT><FONT face="宋体, MS Song" size=3>TQRExpr</FONT><FONT face=宋体 size=3>控件是</FONT><FONT face="宋体, MS Song" size=3>QuickReport</FONT><FONT face=宋体 size=3>数据报表特有的控件,它没有普通的窗体控件与之对应,该控件的引入大大方便了数据报表的设计。</FONT><FONT face="宋体, MS Song" size=3>TQRExpr</FONT><FONT face=宋体 size=3>控件的名称从字面上翻译就是数据报表表达式控件,顾名思义,该控件中可以定义一个表达式,输出的是以文本方式显示的表达式结果。该表达式可以由常量(如数字或字符串常量)、数据字段以及</FONT><FONT face="宋体, MS Song" size=3>QuickReport</FONT><FONT face=宋体 size=3>支持的一些标准变量(如日期、时间、页码等等)组成,表达式支持的运算包括加、减、乘、除、比较运算、逻辑运算等等,表达式中还支持一些简单的函数调用(如</FONT><FONT face="宋体, MS Song" size=3>SUM()</FONT><FONT face=宋体 size=3>、</FONT><FONT face="宋体, MS Song" size=3>AVERAGE()</FONT><FONT face=宋体 size=3>等等),可见</FONT><FONT face="宋体, MS Song" size=3>TQRExpr</FONT><FONT face=宋体 size=3>控件具有较强的数据处理能力。</P></FONT><FONT size=3>< align=justify>QRExpr2</FONT><FONT face=宋体 size=3>和</FONT><FONT size=3>QRExpr3</FONT><FONT face=宋体 size=3>中的表达式比较简单,只定义了要显示的字段名称。如果要构造较为复杂的表达式,可以在对象监视器中双击</FONT><FONT size=3>TQRExpr</FONT><FONT face=宋体 size=3>对象的</FONT><FONT size=3>Expression</FONT><FONT face=宋体 size=3>属性,调出其表达式向导对话框,利用向导构造出符合语法要求的表达式。</P>< align=justify>页脚区</FONT><FONT face="宋体, MS Song" size=3> ageFooterBand1</FONT><FONT face=宋体 size=3>只包含一个</FONT><FONT face="宋体, MS Song" size=3>TQRExpr</FONT><FONT face=宋体 size=3>对象</FONT><FONT face="宋体, MS Song" size=3>QRExpr1</FONT><FONT face=宋体 size=3>,其</FONT><FONT face="宋体, MS Song" size=3>Expression</FONT><FONT face=宋体 size=3>属性字义了它显示的内容为页码数,另外它的</FONT><FONT face="宋体, MS Song" size=3>AlignToBand</FONT><FONT face=宋体 size=3>属性设为了</FONT><FONT face="宋体, MS Song" size=3>true</FONT><FONT face=宋体 size=3>,</FONT><FONT face="宋体, MS Song" size=3>Alignment</FONT><FONT face=宋体 size=3>属性设为</FONT><FONT face="宋体, MS Song" size=3>taRightJustify</FONT><FONT face=宋体 size=3>,表示它将以右对齐的方式显示。</P><UL><B>< align=justify><LI>完成数据报表功能 <p></LI></UL></B><P align=justify>我们已经对数据报表窗体及其上的数据报表控件有了一定的了解,下面我们就来对其报表窗体做一些小小的修改,让它变得美观一些,然后我们在程序的主窗体中加上一些代码,让</FONT><FONT face="宋体, MS Song" size=3>MP3Collect</FONT><FONT face=宋体 size=3>能够调用数据报表。</P><P align=justify>首先,我们把</FONT><FONT face="宋体, MS Song" size=3>Form1</FONT><FONT face=宋体 size=3>的</FONT><FONT face="宋体, MS Song" size=3>Name</FONT><FONT face=宋体 size=3>属性改为</FONT><FONT face="宋体, MS Song" size=3>ReportForm</FONT><FONT face=宋体 size=3>,窗体类名称改为</FONT><FONT face="宋体, MS Song" size=3>TReportForm</FONT><FONT face=宋体 size=3>,并将此单元保存为</FONT><FONT face="宋体, MS Song" size=3>Report.cpp</FONT><FONT face=宋体 size=3>(窗体文件与头文件分别保存为</FONT><FONT face="宋体, MS Song" size=3>Report.dfm</FONT><FONT face=宋体 size=3>和</FONT><FONT face="宋体, MS Song" size=3>Report.h</FONT><FONT face=宋体 size=3>)。接下来,我们把</FONT><FONT face="宋体, MS Song" size=3>ReportForm</FONT><FONT face=宋体 size=3>窗体上的</FONT><FONT face="宋体, MS Song" size=3>Table1</FONT><FONT face=宋体 size=3>控件删除,并重新添加一个</FONT><FONT face="宋体, MS Song" size=3>TQuery</FONT><FONT face=宋体 size=3>控件</FONT><FONT face="宋体, MS Song" size=3>Query1</FONT><FONT face=宋体 size=3>,</FONT><FONT face="宋体, MS Song" size=3>Query1</FONT><FONT face=宋体 size=3>的</FONT><FONT face="宋体, MS Song" size=3>Database</FONT><FONT face=宋体 size=3>属性设为别名</FONT><FONT face="宋体, MS Song" size=3>MP3Collect</FONT><FONT face=宋体 size=3>,</FONT><FONT face="宋体, MS Song" size=3>SQL</FONT><FONT face=宋体 size=3>属性为“</FONT><FONT face="宋体, MS Song" size=3>SELECT * FROM MP3Info Order by FileName ASC</FONT><FONT face=宋体 size=3>”。然后指定其</FONT><FONT face="宋体, MS Song" size=3>Active</FONT><FONT face=宋体 size=3>属性为</FONT><FONT face="宋体, MS Song" size=3>true</FONT><FONT face=宋体 size=3>,其它属性值都接受缺省值。</P><P align=justify>我们把</FONT><FONT face="宋体, MS Song" size=3>QuickRep1</FONT><FONT face=宋体 size=3>的</FONT><FONT face="宋体, MS Song" size=3>DataSet</FONT><FONT face=宋体 size=3>属性指向新的数据来源</FONT><FONT face="宋体, MS Song" size=3>Query1</FONT><FONT face=宋体 size=3>,并修改其</FONT><FONT face="宋体, MS Song" size=3>Bands</FONT><FONT face=宋体 size=3>属性,将其中的子属性</FONT><FONT face="宋体, MS Song" size=3>HasTitle</FONT><FONT face=宋体 size=3>设为</FONT><FONT face="宋体, MS Song" size=3>true</FONT><FONT face=宋体 size=3>,表示增加报表标题的显示。此时,</FONT><FONT face="宋体, MS Song" size=3>ColumnHeaderBand1</FONT><FONT face=宋体 size=3>前面会自动插入一个新的</FONT><FONT face="宋体, MS Song" size=3>TQRBand</FONT><FONT face=宋体 size=3>控件对象</FONT><FONT face="宋体, MS Song" size=3>TitleBand1</FONT><FONT face=宋体 size=3>,我们将其高度调整到合适的位置,然后在其中添加一个</FONT><FONT face="宋体, MS Song" size=3>TQRLabel</FONT><FONT face=宋体 size=3>控件对象</FONT><FONT face="宋体, MS Song" size=3>QRLabel3</FONT><FONT face=宋体 size=3>,并把</FONT><FONT face="宋体, MS Song" size=3>QRLabel3</FONT><FONT face=宋体 size=3>的</FONT><FONT face="宋体, MS Song" size=3>Alignment</FONT><FONT face=宋体 size=3>属性设为</FONT><FONT face="宋体, MS Song" size=3>taCenter</FONT><FONT face=宋体 size=3>,</FONT><FONT face="宋体, MS Song" size=3>AlignToBand</FONT><FONT face=宋体 size=3>属性设为了</FONT><FONT face="宋体, MS Song" size=3>true</FONT><FONT face=宋体 size=3>,表示居中对齐于标题栏的中间,另外还要把</FONT><FONT face="宋体, MS Song" size=3>QRLabel3</FONT><FONT face=宋体 size=3>的</FONT><FONT face="宋体, MS Song" size=3>Caption</FONT><FONT face=宋体 size=3>属性设为“</FONT><FONT face="宋体, MS Song" size=3>MP3</FONT><FONT face=宋体 size=3>音乐宝库——查询结果”,字体设置为“宋体”,大小为</FONT><FONT face="宋体, MS Song" size=3>20</FONT><FONT face=宋体 size=3>。</P><P align=justify>接下来我们把</FONT><FONT face="宋体, MS Song" size=3>ColumnHeaderBand1</FONT><FONT face=宋体 size=3>中的</FONT><FONT face="宋体, MS Song" size=3>QRLabel1</FONT><FONT face=宋体 size=3>和</FONT><FONT face="宋体, MS Song" size=3>QRLabel2</FONT><FONT face=宋体 size=3>控件的</FONT><FONT face="宋体, MS Song" size=3>Caption</FONT><FONT face=宋体 size=3>属性分别修改为“歌曲名称”和“歌手名称”,并把</FONT><FONT face="宋体, MS Song" size=3>PageFooterBand1</FONT><FONT face=宋体 size=3>中的</FONT><FONT face="宋体, MS Song" size=3>QRExpr1</FONT><FONT face=宋体 size=3>控件的</FONT><FONT face="宋体, MS Song" size=3>Expression</FONT><FONT face=宋体 size=3>属性修改为“</FONT><FONT face="宋体, MS Song" size=3>'</FONT><FONT face=宋体 size=3>第</FONT><FONT face="宋体, MS Song" size=3> ' + PageNumber+'</FONT><FONT face=宋体 size=3>页</FONT><FONT face="宋体, MS Song" size=3>'</FONT><FONT face=宋体 size=3>”,把缺省的英文单词改为中文。最后将</FONT><FONT face="宋体, MS Song" size=3>QRLabel1</FONT><FONT face=宋体 size=3>、</FONT><FONT face="宋体, MS Song" size=3>QRLabel2</FONT><FONT face=宋体 size=3>、</FONT><FONT face="宋体, MS Song" size=3>QRExpr1</FONT><FONT face=宋体 size=3>、</FONT><FONT face="宋体, MS Song" size=3>QRExpr2</FONT><FONT face=宋体 size=3>、</FONT><FONT face="宋体, MS Song" size=3>QRExpr3</FONT><FONT face=宋体 size=3>的字体都改为“宋体”,大小改为</FONT><FONT face="宋体, MS Song" size=3>10</FONT><FONT face=宋体 size=3>。在上述过程中,还需要调整各个</FONT><FONT face="宋体, MS Song" size=3>Band</FONT><FONT face=宋体 size=3>区域的高度以适应新的字体高度。</P><P align=justify>做好这一系列调整之后,我们接着要在</FONT><FONT face="宋体, MS Song" size=3>MainForm</FONT><FONT face=宋体 size=3>中添加调用报表窗体的代码。由于</FONT><FONT face="宋体, MS Song" size=3>MainForm</FONT><FONT face=宋体 size=3>窗体上的控件布局已经比较紧凑了,如果再添加新的命令按钮,需要进行的调整就比较大,因此我们不再向</FONT><FONT face="宋体, MS Song" size=3>MainForm</FONT><FONT face=宋体 size=3>窗体中添加新按钮,而是通过添加关联菜单命令的方式来增加打印报表的命令。为此,我们在</FONT><FONT face="宋体, MS Song" size=3>MainForm</FONT><FONT face=宋体 size=3>窗体上的</FONT><FONT face="宋体, MS Song" size=3>PopupMenu1</FONT><FONT face=宋体 size=3>中添加一个菜单项</FONT><FONT face="宋体, MS Song" size=3>mnuReport</FONT><FONT face=宋体 size=3>,其</FONT><FONT face="宋体, MS Song" size=3>Caption</FONT><FONT face=宋体 size=3>属性为“打印报表”,</FONT><FONT face="宋体, MS Song" size=3>OnClick</FONT><FONT face=宋体 size=3>事件处理函数为</FONT><FONT face="宋体, MS Song" size=3>mnuReportClick()</FONT><FONT face=宋体 size=3>,该函数的代码实现如下所示:</P></FONT><FONT size=3><P align=justify>void __fastcall TMainForm::mnuReportClick(TObject *Sender)</P><P align=justify>{</P><P align=justify>ReportForm->Query1->Close();</P><P align=justify>ReportForm->Query1->SQL->Clear();</P><P align=justify>ReportForm->Query1->SQL->AddStrings(Query1->SQL);</P><P align=justify>ReportForm->Query1->Open();</P><P align=justify>ReportForm->QuickRep1->Preview();</P></FONT><FONT face=宋体 size=3><P align=justify>}</P><P align=justify>该函数主要完成以下几个步骤,首先关闭报表窗体的查询控件</FONT><FONT face="宋体, MS Song" size=3>Query1</FONT><FONT face=宋体 size=3>,清除其中原有的</FONT><FONT face="宋体, MS Song" size=3>SQL</FONT><FONT face=宋体 size=3>属性,然后将其</FONT><FONT face="宋体, MS Song" size=3>SQL</FONT><FONT face=宋体 size=3>属性设置成与主窗体上</FONT><FONT face="宋体, MS Song" size=3>Query1</FONT><FONT face=宋体 size=3>控件的</FONT><FONT face="宋体, MS Song" size=3>SQL</FONT><FONT face=宋体 size=3>属性一致,再打开报表窗体的查询控件</FONT><FONT face="宋体, MS Song" size=3>Query1</FONT><FONT face=宋体 size=3>。这样做的目的是保证报表中显示的数据与主窗体中显示的内容一致。函数最后调用报表窗体上</FONT><FONT face="宋体, MS Song" size=3>QuickRep1</FONT><FONT face=宋体 size=3>控件的</FONT><FONT face="宋体, MS Song" size=3>Preview()</FONT><FONT face=宋体 size=3>方法启动打印预览窗口(如图</FONT><FONT face="宋体, MS Song" size=3>17-5</FONT><FONT face=宋体 size=3>所示),用户在该窗口中就可以完成打印报表的操作。</P><P align=justify> </P><P align=justify>本讲介绍了如何利用</FONT><FONT face="宋体, MS Song" size=3>QuickReport</FONT><FONT face=宋体 size=3>控件来实现数据报表的功能,这里介绍的仅仅是最基本的方法,用到的</FONT><FONT face="宋体, MS Song" size=3>QuickReport</FONT><FONT face=宋体 size=3>控件也只有少数几个,如果要设计更复杂的数据报表,朋友们还需要进一步学习各种</FONT><FONT face="宋体, MS Song" size=3>QuickReport</FONT><FONT face=宋体 size=3>控件的用法。</P><P align=justify> </P><P align=justify> </P></FONT> |
|