如何按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
相关产品推荐
相关产品推荐

