2016-08-19 2 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

Добро пожаловать в переполнение стека. Вы можете улучшить свой вопрос. Пожалуйста, прочитайте [Минимальный, Полный и Подтверждаемый пример] (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. Затем, когда у вас есть правильные данные, вы можете просто установить его как источник данных.

Также для этого вам необходимо использовать данные, вместо чтения записей за строкой. Заполнение DataTable выглядит так ..

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 

Надеется, что это помогает!

Смежные вопросы