根据条形码扫描仪扫描的条形码编号填写DataGridView

时间:2017-03-24 05:41:12

标签: .net vb.net winforms datagridview barcode-scanner

我一直在阅读大量的问题和答案,甚至是.NET参考站点。代码似乎很好,但它没有按预期工作。

我有一个TextBox,其中条码扫描器用于扫描条形码并将数字放入其中。收到条形码后,它必须检测 Enter 键并执行搜索数据库并在DataGridView中添加项目的功能。

代码正在运行,但即使我扫描了多个项目,它也只向DataGridView添加了一项。

代码:

 Private Sub txtmodel_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtmodel.KeyPress

    Dim purchasesource As New BindingSource
    If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then


        Dim query As String
        query = "select  prod_name as 'Product Name',prod_cost as 'Cost', prod_price as 'Price' from  product_tbl where prod_STATUS = 'Active' and prod_code = '" & txtmodel.Text & "'"

        cmd = New MySqlCommand(query, con)
        da.SelectCommand = cmd
        da.Fill(sql_get_purchase_item)
        purchasesource.DataSource = sql_get_purchase_item
        DataGridView1.DataSource = purchasesource
        da.Update(sql_get_purchase_item)

        MsgBox(sql_get_purchase_item.Rows.Count)

        barcode = txtmodel.Text 'decaled in the class

        TextBox1.Text &= barcode

        txtmodel.Focus()

        txtmodel.SelectAll()

    End If

End Sub

2 个答案:

答案 0 :(得分:2)

搜索扫描的文本在数据库中可用,并将该行添加到DataGridView

请尝试以下代码:

Private Sub txtmodel_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtmodel.KeyPress

    Dim purchasesource As New BindingSource
    If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then

        Dim query As String
        query = "select  prod_name as 'Product Name',prod_cost as 'Cost', prod_price as 'Price' from  product_tbl where prod_STATUS = 'Active' and prod_code = '" & txtmodel.Text & "'"

        cmd = New MySqlCommand(query, con)
        da.SelectCommand = cmd
        da.Fill(sql_get_purchase_item)
        If sql_get_purchase_item.tables(0).rows.count > 0
            For Each row As DataRow In sql_get_purchase_item.Rows
                DataGridView1.rows.add(row.Item("Product Name"),row.Item("Cost"),row.Item("Price"))
            Next row

        End If
        purchasesource.DataSource = sql_get_purchase_item
        da.Update(sql_get_purchase_item)

        txtmodel.Focus()

        txtmodel.SelectAll()

    End If
End Sub

答案 1 :(得分:0)

根据您的代码,txtModel会在扫描时获得单个产品代码。按 Enter 后,您需要扫描product_tbl以获取特定产品代码,并将其显示在DataGridView中。如果我的逻辑是正确的,它将始终只显示最后扫描的产品。这是因为您的代码是这样说的。

您必须将每个产品添加到DataGridView,而不是将查询结果(始终是一个产品)分配给DataSource DataGridView }。

@Praba为它提供了适当的代码。

编辑添加和评论:

  Private Sub txtmodel_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtmodel.KeyPress

  Dim purchasesource As New BindingSource
  If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then

    Dim query As String
    ' Add break point on the below line.
    ' Check the value of txtModel here.
    query = "select  prod_name as 'Product Name',prod_cost as 'Cost', prod_price as 'Price' from  product_tbl where prod_STATUS = 'Active' and prod_code = '" & txtmodel.Text & "'"

    ' Add a break point on the below line.
    ' Check the value of query variable, copy it and execute it query analyser to check the result.
    cmd = New MySqlCommand(query, con)
    da.SelectCommand = cmd
    da.Fill(sql_get_purchase_item)

    ' Commented as not required.
    ' purchasesource.DataSource = sql_get_purchase_item
    ' DataGridView1.DataSource = purchasesource
    ' da.Update(sql_get_purchase_item)


    If sql_get_purchase_item.tables(0).rows.count > 0
      ' For each is not really required as you should always get only 1 product as a result.
      For Each row As DataRow In sql_get_purchase_item.Rows
        ' Add a break point on the below line.
        ' Check the values of each column returning.
        DataGridView1.rows.add(row.Item("Product Name"),row.Item("Cost"),row.Item("Price"))
      Next row
    End If

    ' Commented as not required.
    ' MsgBox(sql_get_purchase_item.Rows.Count)

    ' Comment if not required.
    barcode = txtmodel.Text 'decaled in the class

    ' Modified for better view
    TextBox1.Text &= barcode

    ' Commented as not required.
    'txtmodel.Focus()
    'txtmodel.SelectAll()

  End If

End Sub