You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对GridControl中showfooter方法生成的小时列求和?

实现GridControl小时列的Footer求和

我来帮你搞定这个小时列求和的需求,既然你已经通过showfooter方法开启了GridControl的footer显示,接下来只需要针对小时列配置汇总规则就行,分几种情况给你说明:

1. 确认列的数据类型基础

首先得保证你的小时列绑定的数据是可求和的数值类型:

  • 如果是直接存储的小时数值(比如decimal/double类型的"工作小时数"),直接就能用默认求和;
  • 如果是TimeSpan类型的时间跨度(比如记录的是一段工作时长),需要先把它转换为总小时数再求和(后面会讲自定义汇总的方法)。

2. 单个固定小时列的求和配置

如果你的小时列是固定的(比如叫colWorkHours),可以直接通过代码或者设计器添加汇总项:

代码示例(C#)

// 获取目标小时列
GridColumn targetColumn = gridView1.Columns["WorkHours"];
// 添加求和汇总,{0:N2}是格式化显示保留两位小数
targetColumn.Summary.Add(GridSummaryItemType.Sum, "WorkHours", "{0:N2}");
// 确保footer已经开启(你用showfooter配置过的话这步可以跳过)
gridView1.OptionsView.ShowFooter = true;

3. 动态生成的小时列批量处理

如果你的小时列是动态生成的(比如按日期拆分的小时列,列名包含"小时"或特定前缀),可以遍历所有列批量配置:

代码示例(C#)

foreach (GridColumn column in gridView1.Columns)
{
    // 根据列名判断是否为小时列,这里以列名包含"Hour"或"小时"为例
    if (column.FieldName.Contains("Hour") || column.Caption.Contains("小时"))
    {
        column.Summary.Add(GridSummaryItemType.Sum, column.FieldName, "{0:N2}");
    }
}

4. TimeSpan类型列的自定义小时求和

如果你的列绑定的是TimeSpan(比如记录的是时间段),直接求和会得到总时间跨度,如果你需要转换成总小时数,就得用自定义汇总:

步骤1:添加自定义汇总项

GridColumn timeColumn = gridView1.Columns["WorkDuration"];
GridSummaryItem customSumItem = new GridSummaryItem();
customSumItem.SummaryType = GridSummaryItemType.Custom;
customSumItem.DisplayFormat = "{0:N2} 小时";
customSumItem.FieldName = "WorkDuration";
timeColumn.Summary.Add(customSumItem);

步骤2:处理CustomSummaryCalculate事件

private void gridView1_CustomSummaryCalculate(object sender, CustomSummaryEventArgs e)
{
    if (e.SummaryItem.SummaryType == GridSummaryItemType.Custom 
        && e.SummaryItem.FieldName == "WorkDuration")
    {
        switch (e.SummaryProcess)
        {
            case CustomSummaryProcess.Start:
                // 初始化总和为0
                e.TotalValue = 0d;
                break;
            case CustomSummaryProcess.Calculate:
                // 把TimeSpan转换为总小时数累加
                TimeSpan duration = (TimeSpan)e.FieldValue;
                e.TotalValue = (double)e.TotalValue + duration.TotalHours;
                break;
        }
    }
}

注意事项

  • 如果是未绑定列,记得设置column.UnboundType为UnboundColumnType.Decimal或Double,确保能正确计算求和;
  • 汇总的显示格式可以根据你的需求调整,比如"{0:N0}"表示整数显示,"{0:N2} 小时"带单位显示。

内容的提问来源于stack exchange,提问作者Burak Turhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:06:10