我一直在阅读大量的问题和答案,甚至是.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
答案 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