如何对GridControl中showfooter方法生成的小时列求和?
我来帮你搞定这个小时列求和的需求,既然你已经通过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
相关产品推荐
相关产品推荐

