SOMAR QUANTIDADE EM DATAGRIDVIEW
estou precisando de um help aqui, estou fazendo uma tela de venda e nesta tela tem dois grid, um para listar os produtos
e o outro é detalhe do pedido, meu problema é ....
gostaria que ao adicionar um item ao pedido se ele já existir do grid de pedido não seja adicionada uma nova linha e sim
somado o campo de quantidade,
agradeço desde já.......
Citação::
Posta o código de inserção no grid pedido
Estou passando os itens no evento CellMouseUp do dgditens ......
Dim nome_item As String = Nothing
Dim val1, val2, val3 As String
Dim celula As DataGridViewCell
Dim contador As Integer
val1 = dgditens.CurrentRow.Cells(0).Value.ToString [ô]id do item
val2 = dgditens.CurrentRow.Cells(1).Value.ToString [ô]descrição
val3 = dgditens.CurrentRow.Cells(2).Value.ToString [ô]valor
If TypeOf dgditens.CurrentCell Is DataGridViewCheckBoxCell Then
dgditens.EndEdit()
Dim cellVal As Boolean = DirectCast(dgditens.CurrentCell.Value, Boolean)
If cellVal Then
[ô]a propriedade AllowUserToAddRows está desabilitada
[ô]então confirmo se já existe uma linha
If dgdpedido.Rows.Count = 0 Then
[ô]se não adiciono o item normal
dgdpedido.Rows.Add(val1, val2, [Ô]1[Ô], val3, val3)
Else
[ô]faço a pesquisa se o item já está incluso no dgdpedido
For Each linha As DataGridViewRow In Me.dgdpedido.Rows
celula = linha.Cells(1)
dgdpedido.CurrentCell = celula
nome_item = celula.Value.ToString()
If nome_item.Contains(val2) Then
[ô]se encontrar soma 1 a quantidade e já multiplica para valor total
dgdpedido.CurrentRow.Cells(2).Value = dgdpedido.CurrentRow.Cells(2).Value + 1
dgdpedido.CurrentRow.Cells(4).Value = val3 * dgdpedido.CurrentRow.Cells(2).Value
Else
[ô]se não existir então adiciona o item normalente
dgdpedido.Rows.Add(val1, val2, [Ô]1[Ô], val3, val3)
Exit Sub
End If
contador = contador + 1
Next
End If
End If
End If
End Sub
quando não existe linha ele adiciona normal, o primeiro item que ele encontra ele faz a soma da quantidade normal, mas se houver um segundo item
repetido ele faz a soma mas inclui o mesmo item em uma nova linha.
[ô]faço a pesquisa se o item já está incluso no dgdpedido
For Each linha As DataGridViewRow In Me.dgdpedido.Rows
If nome_item.Contains(val2) Then
[ô]se encontrar soma 1 a quantidade e já multiplica para valor total
dgdpedido.CurrentRow.Cells(2).Value = dgdpedido.CurrentRow.Cells(2).Value + 1
dgdpedido.CurrentRow.Cells(4).Value = val3 * dgdpedido.CurrentRow.Cells(2).Value
por essa
Dim i As Integer
For i = 0 To dgdpedido.Rows.Count - 1
If dgdpedido.Rows(i).Cells(1).Value = val2 Then
dgdpedido.Rows(i).Cells(2).Value += 1
total = val3 * dgdpedido.Rows(i).Cells(2).Value
dgdpedido.Rows(i).Cells(4).Value = total
Exit Sub
End If
Next
e poste o resultado
Citação::
altere essa parte
[ô]faço a pesquisa se o item já está incluso no dgdpedido
For Each linha As DataGridViewRow In Me.dgdpedido.Rows
If nome_item.Contains(val2) Then
[ô]se encontrar soma 1 a quantidade e já multiplica para valor total
dgdpedido.CurrentRow.Cells(2).Value = dgdpedido.CurrentRow.Cells(2).Value + 1
dgdpedido.CurrentRow.Cells(4).Value = val3 * dgdpedido.CurrentRow.Cells(2).Value
por essa
Dim i As Integer
For i = 0 To dgdpedido.Rows.Count - 1
If dgdpedido.Rows(i).Cells(1).Value = val2 Then
dgdpedido.Rows(i).Cells(2).Value += 1
total = val3 * dgdpedido.Rows(i).Cells(2).Value
dgdpedido.Rows(i).Cells(4).Value = total
Exit Sub
End If
Next
e poste o resultado
ADHEL agradeço seu interesse em me ajudar, mas infelizmente continua com o mesmo efeito, só adiciona se encontrar o item na primeira linha do grid
se não adiciona varias linhas iguais, não sei se tem como por exemplo verificar linhas com valores repetidos
e agrupar, somando um campo especifico, porque no For Each ele olha duas vezes o grid e For i ele não pula para a proxima linha....
não sei mais o que fazer, e não sei se teria uma outra rotina para dar o mesmo resultado final.Muito obrigado pela atenção.
O banco de dados coloque no disco local C:
Citação::
Verifique esse exemplo e veja se dá para adaptar ao seu sistema.
O banco de dados coloque no disco local C:
ADHEL boa noite, fechou com chave de ouro,era exatamente isso, cara você acabou de ganhar um fã,já tinha pesquisado isso na net por dois dias
sinceramente não lembrei de pedir no forum, o site realmente está de parabens primeiro pedido e fui atendido tão rápido, valeu ADHEL, te devo uma........