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

VB.NET中TextBox数据添加至DataGridView:同条码去重及数量累加异常排查

问题排查与修复

核心问题分析

你的代码存在三个关键问题,导致Qty无法正确累加:

  1. 硬编码累加值:每次找到重复条码时,你直接设置DataGridView1.Rows(j).Cells(4).Value = Qty + 1,但Qty始终被初始化为1,所以不管重复多少次,结果都是1+1=2,没有读取当前单元格的现有数量进行累加。
  2. 数据源与界面不同步:修改DataGridView单元格值后,没有更新绑定的数据源itemtransfers中的对应对象属性,这会导致数据状态不一致;同时只有新增行时才调用Bind,修改操作未同步数据源。
  3. 遍历范围错误:For j = 0 To Me.DataGridView1.Rows.Count - 1会遍历到DataGridView的空行(默认允许新增行时最后一行是空行),可能引发空值转换错误。

修正后的代码

Private Sub BtxtBarcode_KeyPress(sender As Object, e As KeyPressEventArgs) Handles BtxtBarcode.KeyPress
    Try
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Enter) Then
            If String.IsNullOrEmpty(BtxtBarcode.Text) Then
                MsgBox("Please enter item barcode.", MsgBoxStyle.Information, "Information")
                Return
            End If

            GetItemData(BtxtBarcode.Text)
            Dim targetBarcode = BtxtBarcode.Text.Trim()
            Dim existingItem = itemtransfers.FirstOrDefault(Function(it) it.Barcode = targetBarcode)

            If existingItem IsNot Nothing Then
                ' 找到重复条码,累加数量
                existingItem.Qty += 1
                DataGridView1.Refresh() ' 刷新界面显示最新数据
            Else
                ' 新增条目
                Dim iRow As Integer = If(itemtransfers.Count = 0, 1, itemtransfers.Max(Function(it) it.No) + 1)
                itemtransfers.Add(New ItemTransfers With {
                    .No = iRow,
                    .CodeProduct = _CodeProduct,
                    .Barcode = _BBarcode,
                    .Qty = 1
                })
                DataGridView1.Bind(itemtransfers)
            End If

            BtxtBarcode.Clear()
        End If
    Catch ex As Exception
        MessageBox.Show(ex.Message, "POS", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    End Try
End Sub

修正说明

  • 直接操作数据源:通过LINQ的FirstOrDefault直接从绑定的itemtransfers集合中查找重复条码的对象,修改其Qty属性后刷新界面,保证数据源和界面数据一致。
  • 正确累加逻辑:existingItem.Qty += 1直接基于现有数量进行累加,解决了硬编码值的问题。
  • 简化行号生成:通过集合的Max方法获取最大行号,避免操作DataGridView的行索引,逻辑更可靠。
  • 空值判断优化:用String.IsNullOrEmpty替代空字符串比较,判断更严谨。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:57:25