简体版
繁体版
英文版

报表编程事件简介

报表主对象事件概述

事件就是 Grid++Report 在运行时由各种报表对象执行特定的任务时所发出的消息,通知操作的发生。报表开发者通过对事件的响应处理,可以控制报表的行为,让 Grid++Report 完成特定的任务。如在 SectionFormat 事件中改变对象的显示外观属性,实现突出显示的功能。

Grid++Report 最先触发 Initialize 事件。如果定义了明细网格,一系列事件会依次触发。如果没有根据数据库连接串与查询SQL设置取得明细记录数据,FetchRecord 事件跟随在 Initialize 事件之后触发,在此事件中报表开发者必须实现向 Grid++Report 提供明细记录数据。在每条明细记录在被提交前,BeforePostRecord 事件会被触发。在向记录集填充完记录之后,Grid++Report 准备对填入的数据进行处理,在处理开始之前触发 ProcessBegin 事件,在处理完成之后触发 ProcessEnd 事件。在数据处理过程中会多次触发 ProcessRecord 事件,每处理一条明细记录触发一次此事件。如果明细网格中定义了分组,则在每个分组项的第一条记录处理之前,触发 GroupBegin 事件,在每个分组项的最后一条记录处理之后,触发 GroupEnd 事件。

如果进行打印页面数据生成,以下事件会被触发。在每页开始时触发 PageStart 事件, 在每页结束时触发 PageEnd 事件。在生成打印页面数据时,明细记录数据会被再遍历一次,PageProcessRecord 事件在遍历每条明细记录时会被触发。在输出每个报表节之前,SectionFormat 事件会被触发。在需要显示字段的文字时,FieldGetDiaplayText 事件会被触发。如果定义有页分组,则 GroupBegin 与 GroupEnd 事件在每页开始与结束时会被分别触发。

如果是在查询显示器中查询显示报表,以下事件会被触发。在屏幕上输出每个报表节之前,SectionFormat 事件会被触发。在需要显示字段的文字时,FieldGetDiaplayText 事件会被触发。以上两个事件在窗口刷新显示时就会被触发,所以在两个事件会被频繁的触发。

以下是报表主对象的几个事件的简要说明:

Initialize 事件

在报表准备生成时触发,报表每生成一次触发一次本事件,此事件也是报表生成过程中最先触发的事件。可以在此事件中对报表进行定义,即可以改变报表模板数据,如重新载入报表模板数据,以编程的方式定义报表。在此事件中,可以将在其它事件中使用的对象接口指针或对象属性等数据用变量缓存下来,以供后面直接使用,提高程序运行效率。在除此事件之外的其它事件中,除了 SectionFormat 事件可以对事件触发节对象及其拥有的子对象的显示外观属性进行修改外,禁止对报表进行重新定义,即不允许增减报表对象与改变报表对象的属性。

FetchRecord 事件

如果没有定义数据库连接串与查询SQL,或指定在运行时不从数据库连接串与查询SQL设置中取得明细记录数据,则FetchRecord 事件在报表请求数据时触发,报表每生成一次触发一次本事件,只有具有明细网格的报表才会触发此事件。报表开发者必须响应此事件,且只能在此事件中向记录集填充记录。报表开发者使用记录集接口与字段接口的属性与方法向记录集填充记录。

注意:Delphi 与 C++Builder 的包装类定义了一个 DataSet 属性,并对 FetchRecord 事件在包装类中进行了响应,如果设置了 DataSet 属性值,则会把 DataSet 属性关联记录集对象中的数据填入到 Grid++Report 中。因此在Delphi 与 C++Builder 中一般通过设置 DataSet 属性来提供明细记录数据。

BeforerPostRecord 事件

在每提交一条记录时,触发一次本事件。报表开发者可以在此事件中设定各个字段的值,这样就可以对记录数据进行最后的调整。如某些字段的值不能直接从数据源中的得来,而是根据一定的运算求得,则可以在此事件中处理。不管是根据查询SQL取得的数据,还是通过 FetchRecord 事件提供的数据,在每提交一条记录之前都会触发本事件。

ProcessRecord 事件

报表在生成的过程中,会按顺序逐条处理每个记录,在每处理一条记录之前,都会触发一次本事件,只有具有明细网格的报表才会触发此事件。如果要对报表数据进行自定义的统计运算,就应该在此事件中取记录数据进行运算,将计算结果保存到参数对象或程序中的变量中。在此事件中可以调用 IGRDetailGrid 接口的 StartNewGroup 方法指定前一个分组项的结束与后一个分组项的开始,从而实现自定义的分组。

GroupBegin GroupEnd 事件

报表在生成的过程中,会按顺序逐条处理每个记录,如果报表定义有分组,每当一个分组项开始时,触发 GroupBegin 事件,每当一个分组项结束时,触发 GroupEnd 事件。如果要对分组进行自定义的复杂统计,可以在 GroupBegin 事件函数中设定运算的初值,在 ProcessRecord 事件中对每条记录进行累积运算,在 GroupEnd 事件中对运算的结果进行最后的运算。

SectionFormat 事件

在每个报表节即将显示之前触发。当报表输出在查询显示器中,每当窗口要进行自画时,当前可见的节在显示时会触发本事件,节如果是重复显示的,同一节还会多次触发。当报表在打印或打印预览时,首先要生成打印页面数据,在页面中显示每个节之前触发本事件。可以通过取报表的当前显示状态(DispalyMode)属性确定事件是由查询显示器自画时触发,还是由生成打印页面时触发。

注意:SectionForamt 事件会频繁触发,在此事件中不应该执行运行开销大的任务,在此事件响应函数中使用的对象接口指针最好在 Initialize 事件处理函数中缓存到变量中。

FieldGetDisplayText 事件

报表在输出显示时,当部件框需要取关联字段的显示文本时触发本事件。在此事件中可以对触发事件的字段对象的显示文本(DisplayText)属性赋值,使字段的显示文本是报表开发者自定义的。例如在财务报表中,需要将负数用红字显示,就可以在此事件处理函数中将负号从显示文本中去掉,在 SectionFormat 事件处理函数中将对应显示部件框的前景色(ForeColor)设为红色。

注意:FieldGetDisplayForamt 事件会频繁触发,在此事件中不应该执行运行开销大的任务,在此事件响应函数中使用的对象接口指针最好在 Initialize 事件处理函数中缓存到变量中。

PageStart 与 PageEnd 事件

如果进行打印页面数据生成,在每页开始时触发 PageStart 事件, 在每页结束时触发 PageEnd 事件。

PrintProcessRecord 事件

报表在生成打印页面的过程中,会再次按顺序逐条处理每个记录,在每处理一条记录之前,都会触发一次本事件,只有具有明细网格的报表才会触发此事件。此事件只有当报表将输出到打印机或打印预览时才会触发。在页分组中,如果要对报表数据进行自定义的统计运算,就应该在此事件中取记录数据进行运算,将计算结果保存到参数对象或程序中的变量中。

按运行过程说明事件

报表数据生成

当报表要执行屏幕查询显示、打印、打印预览、数据导出等任务时,必须首先进行报表数据生成。在报表数据生成过程中,会对报表模板、明细记录与参数等进行综合处理,同时也会触发一些事件。在事件中报表开发者可以对报表生成进行相应的干预与控制。

说明:
1. 以上带有填充色的过程表示会重复多次执行,其对应的事件也会多次触发。
2. 以上圆角矩形表示对应过程有可能执行到,也有可能不会执行。
3. 如果设置了明细网格记录集的数据源连接串与查询SQL且设为不忽略数据源取数,Grid++Report将自动从指定数据源取数,反之将触发FetchRecord事件,要求构件使用程序向报表提供数据。

报表打印页面生成

在生成打印页面的过程中,以下报表事件会被触发。

  1. GroupBegin:当定义了页分组,在开始生成明细网格关联的每一页时,每个页分组将触发一次本事件。

  2. GroupEnd:当定义了页分组,在结束生成明细网格关联的每一页时,每个页分组将触发一次本事件。

  3. PageProcessRecord:在打印页面的生成过程中,明细记录将被再次遍历处理一次,在遍历每一条明细记录将触发一次本事件。

  4. PageStart:在开始生成每一页时,将触发一次本事件。

  5. PageEnd:在结束生成每一页时,将触发一次本事件。

  6. SectionFormat:在生成打印页面的过程中,当要输出某个报表节时,将触发一次本事件。报表节如果在报表中多次输出,每一次输出都会触发一次本事件。报表节包括:页眉、页脚、报表头、报表尾、网格标题行、网格内容行、分组头与分组尾等。

  7. FieldGetDisplayText:当要获取某个字段的显示文字时,触发一次本事件。当内容格或部件框要显示关联字段时,就会执行获取字段显示文字的任务。

报表查询显示

当报表在显示屏幕上查询显示时,只有以下两个事件会被触发。但每当要刷新显示查询显示器控件窗口时,以下事件会被多次触发。查询显示器控件的刷新显示任务会被经常执行,故应该在以下两个事件中避免执行开销大的任务,以免影响显示性能。

  1. SectionFormat:在查询显示器控件窗口的自画过程中,当要输出某个报表节时,将触发一次本事件。报表节包括:页眉、页脚、报表头、报表尾、网格标题行、网格内容行、分组头与分组尾等。

  2. FieldGetDisplayText:当要获取某个字段的显示文字时,触发一次本事件。当内容格或部件框要显示关联字段时,就会执行获取字段显示文字的任务。

 

粤ICP备05037369号 Copyright © 2005-2015 rubylong.cn(版权所有:广州锐浪软件技术有限公司)
地址:广州市天河区五山路135号519-04室 电话: 020-82520837
EMAIL:sales@rubylong.cn(销售) support@rubylong.cn(技术支持) 销售QQ:1067004956 641243789