报表开发重点提示3:在报表中实现自定义统计计算

统计框与统计函数可以自动实现数据的统计分析,如求和,求平均,最大值、最小值与记数等。但某些特殊的统计要求并不能由统计框与统计函数的功能直接实现,如对某个字段中的不分满足条件的求和,按特定的运算规则计算统计数据等。这些特殊的要求使用Grid++Report都是可以实现的,下面就对实现这样的要求进行简单说明。

方式一: 采用计算字段方式

定义一个计算字段,给计算字段设上合理的值,然后对计算字段进行统计。

在报表的记录集中定义一个新的字段,这个字段与报表数据源的字段并不存在对应关系,其字段值在报表的 BeforePostRecord? 事件中根据条件求出,在这里称这样的字段为计算字段。假设计算字段的名称为“CalcField”,下面写出大致的 BeforePostRecord 事件程序代码:

void ReportBeforePostRecord()
{
if (#满足条件#)
Report.FieldByName("CalcField").AsFloat = #求出值#;
else
Report.FieldByName("CalcField").AsFloat = 0;
}

将满足统计条件记录的计算字段的值设上相应的数据,而将不满足统计条件记录的计算字段的值设0。应用统计框与统计函数对这个计算字段进行统计,就可以实现对满足条件的部分数据实现统计。

方式二: 在报表事件中自定义统计,最后替换统计框的统计值

这种方式采用在报表事件代码中计算出统计值,最后用计算出统计值替换统计框自动计算出来的值。一般是在报表的 GroupBegin 事件中设定统计初值,在 ProcessRecord 事件中根据条件与统计规则累计统计数据,最后在 GroupEnd 事件中给统计框设上自定义求出的统计值,下面写出大致的程序代码:

void ReportGroupBegin()
{
//变量
MyTotal记录统计值,这里首先设初值
MyTotal = 0;
}

void ReportProcessRecord()
{
//
这里累计统计,可以按自定义规则运算,可以取各个记录字段的当前值参与运算
MyTotal = MyTotal + ...;
}

void ReportGroupEnd()
{
//将变量
MyTotal赋给统计框
MySummaryBox.Value = MyTotal;
}

说明:

  1. 如果不存在分组,而是对所有记录数据进行一遍统计,应该在 ProcessBegin 事件中设统计初值,在 ProcessEnd 事件中给统计框设上自定义求出的统计值。
  2. 也可以用参数代替统计框,将自定义统计值赋给参数,参数的值可以用静态框或综合文本框进行展现。
  3. 例子 AdvanceCustomSummary 中是用一个初值加上合计值求余额,所以不用进行自定义统计计算。

我來分享一個我的經驗:用的是方法2,在分組尾,添加一個靜態的文本框,然後給關聯一個參數。

 void ReportGroupBegin()

 {

 //变量MyTotal记录统计值,这里首先设初值

   MyTotal = 0;

}

 

void ReportProcessRecord()

 {

 //这里累计统计,可以按自定义规则运算,可以取各个记录字段的当前值参与运算

   MyTotal = MyTotal + ...;

 }

void ReportGroupEnd()

{ //将变量MyTotal赋给參數

    Param1.Value = “總數為:”+ MyTotal;

}

------------------- ----------

跟統計框不同的是,這個方法可以自由的輸入一些字符,統計框貌似只能是數字。 我有一個疑問,如果我在ReportGroupEnd()中直接找到靜態文本框,直接賦值的話,這樣每個在每個靜態文本框的值都是一樣的,如果是用統計框,就會不一樣。 這2者有什麽區別嗎?

原文地址:https://www.cnblogs.com/Spacecup/p/3562142.html