2016-08-19 70 views
0

当一个项目已经在DataGridView中,然后当再次输入同一项目时,数量和总数不会增加或添加。它只会列出相同的项目。如何在DataGridView中的现有项目中添加数量 - vb.net

例如

Item Code ProductName Unit Item  Description Price Quantity Total Discount 
06-098  Biogesic  500mg Paracetamol    5.50 1  5.50 0.00 

TextBox输入条形码,它会在DataGridView列表中的项目。

这里是我的代码:

Private Sub txtbxBarcode_TextChanged(sender As Object, e As EventArgs) Handles txtbxBarcode.TextChanged 
    GetProductInfo() 
End Sub 

Private Sub GetProductInfo() 
    Dim discountAmount As Double 
    Dim medicineName, unit As String 
    Try 
     SQL = "SELECT product_code, Medicine_name, Unit, Description, Price, medicineID FROM medicine_info WHERE barcode = '" & txtbxBarcode.Text & "'" 
     ConnDB() 
     cmd = New MySqlCommand(SQL, conn) 
     dr = cmd.ExecuteReader 

     If dr.Read = True Then 
      txtbxItemCode.Text = dr("product_code") 
      unit = dr("Unit") 
      medicineName = dr("Medicine_name") 
      txtbxItemDesc.Text = dr("Description") 

      'Validate Discount 
      If isDiscount = True Then 
       discountAmount = Val(dr("Price")) * (Val(discountPercent)/100) 
       txtbxPrice.Text = Format(Val(dr("Price")) - discountAmount, "#,##0.00") 
      Else 
       txtbxPrice.Text = Format(dr("Price"), "#,##0.00") 
       discountAmount = 0 
      End If 
      'Validate Quantity 
      If isQuantity = True Then 
       txtbxQuantity.Text = noOfItems 
      Else 
       txtbxQuantity.Text = 1 
      End If 
      txtbxTotal.Text = Format(Val(txtbxPrice.Text.Replace(",", "")) * Val(txtbxQuantity.Text), "#,##0.00") 
      'Adding Item to Gridview to Display 
      dgv.Rows.Add(dr("medicineID"), dr("product_code"), dr("Medicine_name"), dr("Unit"), dr("Description"), txtbxPrice.Text, txtbxQuantity.Text, txtbxTotal.Text, Format(discountAmount * Val(txtbxQuantity.Text), "#,##0.00")) 
      'Get Basket Info 
      BasketInformation() 
      'Clear Barcode text field 
      txtbxBarcode.Clear() 
      'Set Discount to Zero 
      discountPercent = 0 
      isDiscount = False 
      'Set Quantity to False 
      isQuantity = False 
      noOfItems = 1 
     End If 
    Catch ex As Exception 
     MsgBox(ex.ToString) 
    Finally 
     cmd.Dispose() 
     conn.Close() 
    End Try 
End Sub 
+0

欢迎来到Stack Overflow。你可以改善你的问题。请阅读[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。当你的代码没有任何额外的东西显示你的确切问题时,你会向志愿帮助你的人表示敬意。 – zhon

+0

你可以帮助我们通过格式化来帮助你,所以我们没有滚动它。 – zhon

+0

您应该添加/更新datagridview的基础数据源,而不是datagridview本身 –

回答

0

我要做的就是遍历datagridview的并查找匹配的记录我要去插入,如果有添加+1列,如果有ISN不插入该行。

例子:

For each row as DataGridViewRow in datagridview1.Rows 
    If row.Cells(0).Value = dr("ID") Then 
     row.Cells(6).Value = Integer.Parse(row.Cells(6).Value) + 1 
     Exit Sub 'Exit Sub for the purpose of not triggering the row add code since there is an existing record already. 
    End IF 
Next 

datagridview1.rows.add(....) 
0

你应该用数据将其放入一个DataGridView前处理这个问题。然后,当您拥有正确的数据时,您可以将其设置为数据源。

此外,您需要使用数据表,而不是逐行读取记录。填充数据表看起来像这样..

Dim myTable = new DataTable 
Using adapter = New SqlDataAdapter(cmd) 
    adapter.Fill(myTable) 
End Using 

和编辑数据表看起来像这样..

For x as Integer = myTable.rows.Count - 1 to 1 
    For y as Integer = x - 1 to 0 
     If myTable.rows(x).Item("Item Code") = myTable.rows(y).Item("Item Code") Then 
      myTable.rows(x).Item("Quantity") = myTable.rows(x).Item("Quantity") + 1 
      myTable.rows(x).Item("Total") = myTable.rows(x).Item("Total") + myTable.rows(y).item("Total") 
      myTable.rows(y).Delete() 
     End If 
    Next 
Next 

myTable.acceptChanges() 
dgv.dataSource = myTable 'this will put all rows from myTable into the dgv 

希望这有助于!

相关问题