根据条形码扫描仪扫描的条形码编号填充 DataGridView
Filling DataGridView based on a scanned barcode number from a barcode scanner
我阅读了大量的问题和答案,甚至阅读了 .NET 参考站点。代码看起来不错,但没有按预期工作。
我有一个 TextBox
,其中使用条形码扫描仪扫描条形码并将数字放入其中。收到条形码后,它必须检测 Enter 键并执行搜索数据库并将项目添加到 DataGridView
中的功能。
代码有效,但即使我扫描多个项目,它也只会向 DataGridView
添加 1 个项目。
代码:
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
搜索扫描的文本在数据库中是否可用,并将该行添加到 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
根据您的代码,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
我阅读了大量的问题和答案,甚至阅读了 .NET 参考站点。代码看起来不错,但没有按预期工作。
我有一个 TextBox
,其中使用条形码扫描仪扫描条形码并将数字放入其中。收到条形码后,它必须检测 Enter 键并执行搜索数据库并将项目添加到 DataGridView
中的功能。
代码有效,但即使我扫描多个项目,它也只会向 DataGridView
添加 1 个项目。
代码:
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
搜索扫描的文本在数据库中是否可用,并将该行添加到 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
根据您的代码,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