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

如何根据DataGridView复选框勾选状态求和指定列并显示到文本框

修复后的实现代码与说明

原代码存在的问题

  • 求和变量sum定义在循环内的if分支中,每次命中勾选行都会被重置为0,最终只能得到最后一条勾选行的重量,无法实现累加
  • 列索引取值错误:DataGridView列索引从0开始计数,第三列Gross Weight对应的索引是2,原代码中Cells[3]实际取的是第四列的值
  • 结果赋值写在if分支内,若没有勾选行时文本框不会清空
  • 类型转换逻辑不安全,遇到空行、空值时会直接抛出运行时异常
  • 最终赋值对象错误,需求要求输出到txtGW.Text,原代码错误赋值给了txtBKselect.Text

修复后的循环版本(兼容原有写法逻辑)

// 求和变量定义在循环外部
double sum = 0;
for (int i = 0; i < datagridviewLog.Rows.Count; i++)
{
    // 跳过新行模板行避免空值报错
    if (datagridviewLog.Rows[i].IsNewRow) continue;
    
    // 直接转bool判断勾选状态,不需要转字符串对比
    bool isChecked = (bool)datagridviewLog.Rows[i].Cells[0].Value;
    if (isChecked)
    {
        // 安全转换重量值,避免空值/格式错误报错
        if (double.TryParse(datagridviewLog.Rows[i].Cells[2].Value?.ToString(), out double weight))
        {
            sum += weight;
        }
    }
}
// 最终统一赋值给目标文本框,可根据需求调整小数保留格式
txtGW.Text = sum.ToString("F2");

可选简化版本(LINQ写法,代码更简洁)

double sum = datagridviewLog.Rows
    .Cast<DataGridViewRow>()
    .Where(r => !r.IsNewRow && (bool)r.Cells[0].Value)
    .Sum(r => double.TryParse(r.Cells[2].Value?.ToString(), out double w) ? w : 0);
txtGW.Text = sum.ToString();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:45:03