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

列小时求和:使用ShowFooter属性时如何设置列底空白及SummaryItem格式?

搞定列下空白区域+小时总和统计的方案

嘿,针对你的需求,我给你整理了两步走的具体实现方法,都是基于DevExpress Grid控件的常用操作哈:

一、给列下方加空白区域

当你开启ShowFooter后,默认的Footer栏是紧贴数据行的,要加空白很简单,直接调整GridView的FooterPanelHeight属性就行——把它设为比默认值更大的数值,多余的部分就会变成空白区域。比如:

// 假设你的GridView是gridView1,把Footer高度设为80(默认大概20左右)
gridView1.FooterPanelHeight = 80;

这样Footer栏就会变高,汇总内容显示在上方,下方自然就留出空白啦。如果需要针对特定列做更精细的空白控制,也可以自定义Footer绘制,但这个方法是最省心的。

二、用SummaryItem实现小时总和统计

因为你存储的是HH:mm格式的时间,首先得计算每行的时长(Me减去Se的小时数),然后再做汇总。这里给你两种方法:

方法1:先给数据源加计算列(推荐,逻辑清晰)

先从数据库查询数据后,给你的DataTable加一个计算列,算出每行的小时时长,再绑定到Grid:

// 假设你的查询结果存在dtLogBook里
DataTable dtLogBook = new DataTable();
// 这里写你的查询代码...

// 添加计算列,存储每行的小时时长
dtLogBook.Columns.Add("TotalHours", typeof(double));
foreach (DataRow row in dtLogBook.Rows)
{
    DateTime seTime = DateTime.Parse(row["Se"].ToString());
    DateTime meTime = DateTime.Parse(row["Me"].ToString());
    TimeSpan duration = meTime - seTime;
    row["TotalHours"] = duration.TotalHours; // 转换成总小时数,支持小数
}

// 绑定到GridControl
gridControl1.DataSource = dtLogBook;

然后给对应的列添加汇总项:

GridView gridView = gridControl1.MainView as GridView;
// 获取你要显示汇总的列(比如刚才加的TotalHours列)
GridColumn hourColumn = gridView.Columns["TotalHours"];

// 创建汇总项
GridSummaryItem sumItem = new GridSummaryItem();
sumItem.FieldName = "TotalHours";
sumItem.SummaryType = DevExpress.Data.SummaryItemType.Sum;
// 设置显示格式,比如保留两位小数
sumItem.DisplayFormat = "总时长: {0:N2} 小时";

// 把汇总项加到列的汇总集合里
hourColumn.Summary.Add(sumItem);
// 确保Footer开启
gridView.OptionsView.ShowFooter = true;

方法2:自定义汇总事件(不用修改数据源)

如果不想动数据源,直接通过GridView的自定义汇总事件来计算:

GridView gridView = gridControl1.MainView as GridView;
gridView.OptionsView.ShowFooter = true;

// 给任意一列添加自定义汇总项(这里选Me列为例)
GridSummaryItem customSum = new GridSummaryItem();
customSum.SummaryType = DevExpress.Data.SummaryItemType.Custom;
customSum.DisplayFormat = "总时长: {0:N2} 小时";
gridView.Columns["Me"].Summary.Add(customSum);

// 处理自定义汇总计算事件
gridView.CustomSummaryCalculate += (sender, e) =>
{
    if (e.SummaryItem.SummaryType != DevExpress.Data.SummaryItemType.Custom) return;

    switch (e.SummaryProcess)
    {
        case DevExpress.Data.CustomSummaryProcess.Start:
            // 初始化总和为0
            e.TotalValue = 0d;
            break;
        case DevExpress.Data.CustomSummaryProcess.Calculate:
            // 取出当前行的Se和Me时间,计算时长
            DateTime se = DateTime.Parse(gridView.GetRowCellValue(e.RowHandle, "Se").ToString());
            DateTime me = DateTime.Parse(gridView.GetRowCellValue(e.RowHandle, "Me").ToString());
            TimeSpan duration = me - se;
            // 累加到总和
            e.TotalValue = (double)e.TotalValue + duration.TotalHours;
            break;
        // End阶段不需要额外操作,自动显示结果
    }
};

最后两步结合

把上面的Footer高度设置和汇总代码放在一起,运行后就能看到:Footer栏有空白区域,同时显示出所有行的小时总和啦。

内容的提问来源于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.25 03:49:50