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

如何按ComboBox筛选条件对跨窗体DataGridView指定单元格求和?

问题分析与解决建议

你的代码核心问题出在内层循环上:当找到匹配ComboBox1.Text的行后,你又写了一个遍历所有行的循环来累加数值,这就导致只要有一行符合条件,就会把DataGridView2里所有行的Cells(1)值都加进去,自然得不到仅匹配行的求和结果。

修正后的代码

Private Sub cn()
    Dim totalcn As Double = 0 ' 初始化总和为0
    For Each rw As DataGridViewRow In Form1.DataGridView2.Rows
        ' 跳过DataGridView默认的空新行(如果开启了允许添加新行)
        If rw.IsNewRow Then Continue For
        
        ' 先判断关键单元格是否为空,避免空引用错误
        If rw.Cells(2).Value IsNot Nothing AndAlso rw.Cells(1).Value IsNot Nothing Then
            ' 匹配ComboBox选中的选项值
            If rw.Cells(2).Value.ToString() = ComboBox1.Text Then
                Dim cellValue As Integer
                ' 用TryParse做安全转换,防止单元格内容非整数时报错
                If Integer.TryParse(rw.Cells(1).Value.ToString(), cellValue) Then
                    totalcn += cellValue
                End If
            End If
        End If
    Next
    Label11.Text = totalcn.ToString()
End Sub

关键优化说明

  • 移除多余内层循环:直接在匹配的行上累加当前行的目标单元格值,不再遍历所有行
  • 增加空值防护:避免单元格为空时触发NullReferenceException
  • 使用Integer.TryParse:防止单元格内容不是整数时出现转换错误,提升代码健壮性
  • 跳过新行:如果你的DataGridView允许用户添加新行(默认开启),这个判断可以避免把空的新行计入求和

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 13:43:11