SOMAR QUANTIDADE EM DATAGRIDVIEW

SEMPERFY 29/10/2012 10:48:43
#413044
olá pessoal,
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á.......
ADHEL 29/10/2012 11:28:03
#413048
Resposta escolhida
Posta o código de inserção no grid pedido
SEMPERFY 29/10/2012 13:34:22
#413063
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.
ADHEL 29/10/2012 14:14:13
#413071
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
SEMPERFY 29/10/2012 16:05:50
#413077
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.
ADHEL 29/10/2012 20:32:26
#413100
Verifique esse exemplo e veja se dá para adaptar ao seu sistema.
O banco de dados coloque no disco local C:
SEMPERFY 29/10/2012 22:56:37
#413114
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........
Tópico encerrado , respostas não são mais permitidas