解决NumericUpDown值为0时无法正确删除DataGridView中Hawaiian对应行的问题
解决DataGridView中精准删除Hawaiian行的问题
我太懂你这一周的困扰了——你之前写的删除代码依赖CurrentRow.Index,但当前选中的行未必就是目标Hawaiian行,这才会出现要么删错行、要么只能删第一行的情况。其实咱们可以复用你之前查找Hawaiian行的思路,先精准定位到目标行再执行删除,就能彻底解决问题。
修正后的删除逻辑代码
' 反向遍历行,避免删除后索引错乱 For i As Integer = DataGridView1.Rows.Count - 1 To 0 Step -1 Dim targetRow As DataGridViewRow = DataGridView1.Rows(i) ' 先做非空判断,防止空引用异常 If targetRow.Cells(0).Value IsNot Nothing AndAlso targetRow.Cells(0).Value.ToString() = "Hawaiian" Then Dim qty As Double = 0 Dim amount As Double = 0 ' 安全转换单元格值,避免格式错误导致崩溃 Double.TryParse(targetRow.Cells(1).Value?.ToString(), qty) Double.TryParse(targetRow.Cells(2).Value?.ToString(), amount) ' 当Qty或Amount为0时删除该行 If qty = 0 OrElse amount = 0 Then DataGridView1.Rows.Remove(targetRow) ' 如果只需要删除第一个匹配的Hawaiian行,可在此添加Exit For终止循环 ' Exit For End If End If Next
关键优化点说明
- 反向遍历:从最后一行往第一行遍历,避免删除行后后续行的索引前移,导致漏判或索引越界问题。
- 非空+安全转换:先判断单元格值不为空,再用
Double.TryParse替代直接Parse,彻底避免空引用和格式转换异常。 - 精准定位:严格匹配第一列值为"Hawaiian"的行,再检查Qty(第二列)或Amount(第三列)是否为0,完全贴合你的需求。
你可以把这段代码放在NumericUpDown的ValueChanged事件里,和你之前的数量更新逻辑结合,这样数值变更时就能自动同步处理行的更新或删除了。
内容的提问来源于stack exchange,提问作者Shutong
相关产品推荐
相关产品推荐

