如何计算GridView列中时间值的总和并传递至TextEdit
计算GridView时间列总和并显示到TextEdit的实现方案
嘿,我来帮你搞定这个计算GridView时间列总和并显示到TextEdit的需求!看你提到时间格式是HH:mm.ff(比如22:40、10:30),下面是针对DevExpress WinForms控件的具体实现方案,步骤清晰,还考虑了异常情况哦~
核心思路
- 遍历GridView的所有数据行,跳过非数据行(比如分组行)
- 提取指定列的时间字符串,过滤空值或无效内容
- 将符合格式的时间字符串解析为
TimeSpan类型,方便累加计算 - 累加所有有效时长,最后把总时长转换为
HH:mm.ff格式,赋值给TextEdit控件
代码实现
using System; using System.Globalization; using DevExpress.XtraGrid.Views.Grid; // 初始化总时长为0 TimeSpan totalDuration = TimeSpan.Zero; // 遍历GridView的所有数据行 for (int rowHandle = 0; rowHandle < gridView1.DataRowCount; rowHandle++) { // 跳过非数据行(比如分组标题行) if (!gridView1.IsDataRow(rowHandle)) continue; // 获取指定列的单元格值(替换成你的列字段名,比如"WorkTime") object cellValue = gridView1.GetRowCellValue(rowHandle, "TimeColumn"); if (cellValue == null || string.IsNullOrWhiteSpace(cellValue.ToString())) continue; string timeString = cellValue.ToString().Trim(); // 尝试按指定格式解析时间字符串为TimeSpan if (TimeSpan.TryParseExact(timeString, @"hh:mm\.ff", CultureInfo.InvariantCulture, out TimeSpan currentTime)) { totalDuration += currentTime; } else { // 可选:处理格式错误的情况,比如输出调试日志 System.Diagnostics.Debug.WriteLine($"行{rowHandle + 1}的时间格式无效:{timeString}"); } } // 将总时长格式化为HH:mm.ff格式,显示到TextEdit textEdit1.Text = totalDuration.ToString(@"hh\:mm\.ff");
注意事项
- 替换代码中的
gridView1为你的GridView控件实例,"TimeColumn"为实际的列字段名(也可以用列索引,比如gridView1.Columns[2]) - 如果你的时间格式只有
HH:mm(没有毫秒部分),把解析和格式化的格式字符串改成@"HH:mm"即可 - 若GridView绑定的是自定义实体类,可将
gridView1.GetRow(rowHandle)转为实体类型,直接取对应属性值(比如var item = gridView1.GetRow(rowHandle) as YourEntity; string timeStr = item.TimeProperty;) - 记得添加必要的命名空间,避免编译错误
这样就能准确计算并展示总时长啦!
内容的提问来源于stack exchange,提问作者Burak Turhan
相关产品推荐
相关产品推荐

