zoukankan      html  css  js  c++  java
  • 报表开发重点提示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者有什麽區別嗎?

  • 相关阅读:
    使用C#替换Word文档里的文字和图片
    《程序员的思维修炼—开发认知潜能的九堂课》—从新手到专家的历程
    从已有数据库表生成Insert语句的小工具
    我的2010
    Sqlite批量插入速度慢的解决方法小计
    分享一个winForm下的Chart控件
    分享一个任务提醒小工具
    SpringBoot+Vue+Echarts实现选择时间范围内数据加载显示柱状图
    Winform中选取指定文件夹并获取其下所有文件
    Vue中JS遍历后台JAVA返回的Map数据,构造对象数组数据格式
  • 原文地址:https://www.cnblogs.com/Spacecup/p/3562142.html
Copyright © 2011-2022 走看看