VB.NET遍历DataGridView行时MessageBox未显示全部CodeProduct值问题排查
VB.NET库存校验弹窗不触发问题排查与修正
常见问题点及解决方法
1. 数据类型不匹配导致判断失效
- 问题:若
CodeProduct单元格值为空/DBNull,或库存、出库数量解析时类型不匹配,会直接跳过判断逻辑;若库存为小数类型却用整数解析,精度丢失也会导致判断错误。 - 修正:
先校验单元格值有效性,再做类型转换:
若库存为小数类型,改用For Each row As DataGridViewRow In DataGridView2.Rows ' 跳过未提交的新行 If row.IsNewRow Then Continue For ' 校验CodeProduct单元格值 If row.Cells("CodeProduct").Value Is DBNull.Value OrElse String.IsNullOrEmpty(row.Cells("CodeProduct").Value.ToString().Trim()) Then Continue For End If Dim code As String = row.Cells("CodeProduct").Value.ToString().Trim() ' 校验出库数量格式 Dim qty As Integer If row.Cells("Qty").Value Is DBNull.Value OrElse Not Integer.TryParse(row.Cells("Qty").Value.ToString(), qty) Then MessageBox.Show($"行{row.Index}的数量格式错误") Continue For End If ' 获取当前库存(假设GetStockByCode为自定义库存查询方法) Dim stock As Integer = GetStockByCode(code) ' 不区分大小写匹配产品编码,判断库存是否不足 If code.Equals("B", StringComparison.OrdinalIgnoreCase) AndAlso stock < qty Then MessageBox.Show($"B产品库存不足,当前库存:{stock},需出库:{qty}") ' 可选:终止遍历,避免重复弹窗 Exit For End If NextDecimal.TryParse解析比较。
2. 遍历逻辑跳过目标行
- 问题:未跳过
DataGridView的新行(IsNewRow=True),空值干扰判断;或错误遍历可见行而非全部行。 - 修正:
- 遍历开头必须加
If row.IsNewRow Then Continue For跳过未提交的新行; - 确保遍历
DataGridView2.Rows所有行,而非VisibleRows。
- 遍历开头必须加
3. 判断条件逻辑错误
- 问题:把库存不足的判断写反(比如
stock > qty),或产品编码匹配未忽略大小写(单元格值为"b"却判断code = "B")。 - 修正:
- 用
StringComparison.OrdinalIgnoreCase实现不区分大小写的编码匹配; - 确认判断逻辑为当前库存 < 需出库数量。
- 用
4. 未进入判断分支或弹窗被阻塞
- 问题:获取库存的方法
GetStockByCode返回错误值,或UI线程被后台操作阻塞导致弹窗无法显示;或判断后用Continue For跳过了弹窗代码。 - 修正:
- 加调试输出确认是否进入分支:
If code.Equals("B", StringComparison.OrdinalIgnoreCase) Then Debug.WriteLine($"当前行编码为B,库存:{stock},出库数:{qty}") If stock < qty Then MessageBox.Show("B产品库存不足") End If End If - 检查
GetStockByCode逻辑,确认返回的库存值与实际一致; - 若UI线程阻塞,将库存查询改为异步操作:
Private Async Sub btnCheckStock_Click(sender As Object, e As EventArgs) Handles btnCheckStock.Click For Each row As DataGridViewRow In DataGridView2.Rows ' 同上校验逻辑... Dim stock As Integer = Await Task.Run(Function() GetStockByCode(code)) ' 判断弹窗逻辑... Next End Sub
- 加调试输出确认是否进入分支:
额外调试技巧
- 在Visual Studio中设置断点,遍历到编码为"B"的行时,逐行检查
code、stock、qty的值,确认判断条件是否满足; - 查看
DataGridView2的数据源,确认编码为"B"的行的库存和数量值是否符合预期。
内容的提问来源于stack exchange,提问作者roy
相关产品推荐
相关产品推荐

