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

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
    Next
    
    若库存为小数类型,改用Decimal.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跳过了弹窗代码。
  • 修正:
    1. 加调试输出确认是否进入分支:
      If code.Equals("B", StringComparison.OrdinalIgnoreCase) Then
          Debug.WriteLine($"当前行编码为B,库存:{stock},出库数:{qty}")
          If stock < qty Then
              MessageBox.Show("B产品库存不足")
          End If
      End If
      
    2. 检查GetStockByCode逻辑,确认返回的库存值与实际一致;
    3. 若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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 12:17:07