Usuário com melhor resposta
Percorrer linhas datagridview como FOR

Pergunta
-
Boas pessoal,
Precisava de ajudar para saber como é que posso percorrer uma datagridview através de FOR. O problema é o seguinte, tenho um ecrã de vendas escolho um produtoX, onde vai a BD buscar o preco e o utilizador digita a quantidade que pretende e manda tudo para a datagridview, quando eu selecionasse o produtoY, mandava-me os dados para a linha de baixo o que não me está acontecer, se eu quisesse adicionar mais uma quantidade ao produtoX tinha de percorrer a datagridview para ver onde estava a linha com o nome daquele produto e à quantidade que lá tinha somava a nova. E não estou a conseguir
[code=vb]
Dim produto As String
produto = Lbproduto.Text
Dim quantidade As Integer
Dim preco, total, subtotal, soma As Double
quantidade = Val(txtquant.Text)
preco = Val(txtpreco.Text.Replace(",", "."))
total = Val(Ecravendas.Lbtotal.Text.Replace(",", "."))
Dim i As Integer = 0
''percorre cada linha do DataGridView
''For Each linha As DataGridViewRow In Ecravendas.DataGridView1.Rows
'' For i = 0 To i < 10
'For linha As Integer = 0 To Ecravendas.DataGridView1.RowCount
If Ecravendas.DataGridView1.Rows(i).Cells(1).Value = produto Is Nothing Then
subtotal = quantidade * preco
Ecravendas.Lbtotal.Text = subtotal.ToString()
Ecravendas.DataGridView1.Rows.Add(New String() {quantidade, produto, subtotal})
soma = total + subtotal
Ecravendas.Lbtotal.Text = soma.ToString()
Else
Ecravendas.DataGridView1.Rows(i).Cells(1).Value = produto
Ecravendas.DataGridView1.Rows(i).Cells(0).Value = Ecravendas.DataGridView1.Rows(i).Cells(0).Value + quantidade
' quantidade = Ecravendas.DataGridView1.Rows(i).Cells(0).Value
subtotal = Ecravendas.DataGridView1.Rows(i).Cells(0).Value * preco
Ecravendas.DataGridView1.Rows(i).Cells(2).Value = subtotal
Ecravendas.Lbtotal.Text = subtotal.ToString()
' Ecravendas.DataGridView1.Rows.Add(New String() {quantidade, produto, subtotal})
soma = total + subtotal
Ecravendas.Lbtotal.Text = soma.ToString()
End If
'Next
'i = i + 1
End If
[/code]
Respostas
-
está certo, mais tem anular a variavel. tenta assim
dim total as double = 0 For Each colunas As DataGridViewRow In Ecravendas.DataGridView1.Rows total = total + colunas.Cells(2).Value Next Ecravendas.Lbtotal.Text = Format(total, "0.00")
Skype = jonnathanvb
Não esqueça de marca como resposta, o comentario anterior caso teve sucesso, para fechar sua thread.- Editado Jonnathanvb sexta-feira, 25 de abril de 2014 18:14
- Sugerido como Resposta Giovani Cr sexta-feira, 25 de abril de 2014 19:23
- Marcado como Resposta Giovani Cr segunda-feira, 28 de abril de 2014 17:53
Todas as Respostas
-
jotamax tenta assim
'para saber se encontrou algum produto ou não
Dim Localizado As Boolean = False For Each linha As DataGridViewRow In escravendas.datagridview1.rows If linha.Cells(1).Value = produto Then 'aqui vc coloca codigo para soma as quantidades depois aplica na variavel o valor true Localizado = True End If Next If Localizado = False Then 'aqui vc coloca o codigo para adicionar os valores como nova linha pois ele não localizou nenhum registro no datagrid End If
- Editado Jonnathanvb quinta-feira, 24 de abril de 2014 17:45
-
Já fiz alteração mediante o que Jonnathanvb me indicou, mas o que ele esta a fazer é adiciono produtoX com quantidade 1, volto a introduzir o produtoX com quantidade 1 ele passa 2 boa, adiciono produtoY com quantidade 1 ele mete na grelha na linha de baixo, introduzo mais uma quantidade ao produtoY e ela adiciona essa quantidade ao produtoX
[codigo=vb]
Dim produto As String
produto = Lbproduto.Text
Dim quantidade As Integer
Dim preco, total, subtotal, soma As Double
quantidade = Val(txtquant.Text)
preco = Val(txtpreco.Text.Replace(",", "."))
total = Val(Ecravendas.Lbtotal.Text.Replace(",", "."))
Dim i As Integer
Dim Localizado As Boolean = False
For Each linha As DataGridViewRow In Ecravendas.DataGridView1.Rows
If linha.Cells(1).Value = produto Then
'aqui vc coloca codigo para soma as quantidades depois aplica na variavel o valor true
Ecravendas.DataGridView1.Rows(i).Cells(1).Value = produto
Ecravendas.DataGridView1.Rows(i).Cells(0).Value = Ecravendas.DataGridView1.Rows(i).Cells(0).Value + quantidade
' quantidade = Ecravendas.DataGridView1.Rows(i).Cells(0).Value
subtotal = Ecravendas.DataGridView1.Rows(i).Cells(0).Value * preco
Ecravendas.DataGridView1.Rows(i).Cells(2).Value = subtotal
Ecravendas.Lbtotal.Text = subtotal.ToString()
' Ecravendas.DataGridView1.Rows.Add(New String() {quantidade, produto, subtotal})
soma = total + subtotal
Ecravendas.Lbtotal.Text = soma.ToString()
Localizado = True
End If
Next
If Localizado = False Then
'aqui vc coloca o codigo para adicionar os valores como nova linha pois ele não localizou nenhum registro no datagrid
subtotal = quantidade * preco
Ecravendas.Lbtotal.Text = subtotal.ToString()
Ecravendas.DataGridView1.Rows.Add(New String() {quantidade, produto, subtotal})
soma = total + subtotal
Ecravendas.Lbtotal.Text = soma.ToString()
End If[/code]
-
a logica esta certa, mais os codigos esta errado vc deveria usar a linha que foi capturada no laço, ele adiciona novamente na linha index 0 porque o codigo esta congelado a essa linha, segue a correção
Dim produto As String produto = Lbproduto.Text Dim quantidade As Integer Dim preco, total, subtotal, soma As Double quantidade = Val(txtquant.Text) preco = Val(txtpreco.Text.Replace(",", ".")) total = Val(Ecravendas.Lbtotal.Text.Replace(",", ".")) Dim i As Integer Dim Localizado As Boolean = False For Each linha As DataGridViewRow In Ecravendas.DataGridView1.Rows If linha.Cells(1).Value = produto Then 'aqui vc coloca codigo para soma as quantidades depois aplica na variavel o valor true linha.Rows(i).Cells(1).Value = produto ' erro Ecravendas.DataGridView1.Rows(i).Cells(0).Value = Ecravendas.DataGridView1.Rows(i).Cells(0).Value + quantidade linha.Rows(i).Cells(0).Value = Ecravendas.DataGridView1.Rows(i).Cells(0).Value + quantidade ' quantidade = Ecravendas.DataGridView1.Rows(i).Cells(0).Value ' Erro subtotal = Ecravendas.DataGridView1.Rows(i).Cells(0).Value * preco subtotal = linha.Rows(i).Cells(0).Value * preco ' Erro linha.Rows(i).Cells(2).Value = subtotal linha.Rows(i).Cells(2).Value = subtotal Ecravendas.Lbtotal.Text = subtotal.ToString() ' Ecravendas.DataGridView1.Rows.Add(New String() {quantidade, produto, subtotal}) soma = total + subtotal Ecravendas.Lbtotal.Text = soma.ToString() Localizado = True End If Next If Localizado = False Then 'aqui vc coloca o codigo para adicionar os valores como nova linha pois ele não localizou nenhum registro no datagrid subtotal = quantidade * preco Ecravendas.Lbtotal.Text = subtotal.ToString() Ecravendas.DataGridView1.Rows.Add(New String() {quantidade, produto, subtotal}) soma = total + subtotal Ecravendas.Lbtotal.Text = soma.ToString() End If
-
-
ok, jotamax, descupe, eu acabei errando na digitação e esqueci de tirar a palavra rows, pois a variavel linha e do tipo row, e no laço tem que fica assim linha.cells(coluna).value, e estava errado assim linha.rows.cells.value
Skype = jonnathanvb
Dim produto As String produto = Lbproduto.Text Dim quantidade As Integer Dim preco, total, subtotal, soma As Double quantidade = Val(txtquant.Text) preco = Val(txtpreco.Text.Replace(",", ".")) total = Val(Ecravendas.Lbtotal.Text.Replace(",", ".")) Dim i As Integer Dim Localizado As Boolean = False For Each linha As DataGridViewRow In Ecravendas.DataGridView1.Rows If linha.Cells(1).Value = produto Then 'aqui vc coloca codigo para soma as quantidades depois aplica na variavel o valor true linha.Cells(1).Value = produto ' erro Ecravendas.DataGridView1.Rows(i).Cells(0).Value = Ecravendas.DataGridView1.Rows(i).Cells(0).Value + quantidade linha.Cells(0).Value = linha.Cells(0).Value + quantidade ' quantidade = Ecravendas.DataGridView1.Rows(i).Cells(0).Value ' Erro subtotal = Ecravendas.DataGridView1.Rows(i).Cells(0).Value * preco subtotal = linha.Cells(0).Value * preco ' Erro linha.Rows(i).Cells(2).Value = subtotal linha.Cells(2).Value = subtotal Ecravendas.Lbtotal.Text = subtotal.ToString() ' Ecravendas.DataGridView1.Rows.Add(New String() {quantidade, produto, subtotal}) soma = total + subtotal Ecravendas.Lbtotal.Text = soma.ToString() Localizado = True Exit For End If Next If Localizado = False Then 'aqui vc coloca o codigo para adicionar os valores como nova linha pois ele não localizou nenhum registro no datagrid subtotal = quantidade * preco Ecravendas.Lbtotal.Text = subtotal.ToString() Ecravendas.DataGridView1.Rows.Add(New String() {quantidade, produto, subtotal}) soma = total + subtotal Ecravendas.Lbtotal.Text = soma.ToString() End If
- Editado Jonnathanvb sexta-feira, 25 de abril de 2014 17:17
- Sugerido como Resposta Jonnathanvb sexta-feira, 25 de abril de 2014 18:14
-
Jonnathanvb podia me ajudar atualizar o lbtotal que é a soma total dos produtos que estão na grid, quando eu actualizo a quantidade na lbtotal fica o preco da quantidade anterior mais o preco da nova quantidade e deveria ficar so o da nova quantidade. Penso que será por uma for tambem indo à coluna
[code=vb]
For Each colunas As DataGridViewRow In Ecravendas.DataGridView1.Rows
total = total + colunas.Cells(2).Value
Ecravendas.Lbtotal.Text = total.ToString()
Ecravendas.Lbtotal.Text = Format(total, "0.00")
Next
[/code]
-
está certo, mais tem anular a variavel. tenta assim
dim total as double = 0 For Each colunas As DataGridViewRow In Ecravendas.DataGridView1.Rows total = total + colunas.Cells(2).Value Next Ecravendas.Lbtotal.Text = Format(total, "0.00")
Skype = jonnathanvb
Não esqueça de marca como resposta, o comentario anterior caso teve sucesso, para fechar sua thread.- Editado Jonnathanvb sexta-feira, 25 de abril de 2014 18:14
- Sugerido como Resposta Giovani Cr sexta-feira, 25 de abril de 2014 19:23
- Marcado como Resposta Giovani Cr segunda-feira, 28 de abril de 2014 17:53
-
Jonnathanvb como posso ter num botao para o utilizador poder ir eliminando quantidade uma a uma quando selecionasse a linha daquele produto e atualiza-se o preco. A quantidade eu elimino, não sei é atualizar o preço. [code=vb] If DataGridView1.SelectedRows.Count <> 1 Then MsgBox("selecione") Else For Each eliminar As DataGridViewRow In DataGridView1.SelectedRows If eliminar.Cells(0).Value <= 0 Then Else eliminar.Cells(0).Value = eliminar.Cells(0).Value - 1 eliminar.Cells(3).Value = eliminar.Cells(0).Value * eliminar.Cells(3).Value End If Next [/code]
-
-
-
Tenho uma datagrid com a quantidade, o produto, a taxa de iva , o preco e o iva (o iva que é calculado em função da taxa de iva e do preco).
A quantidade, o produto, a taxa de iva sao envidos os valores para a datagrid atraves da base de dados, eu queria ajuda era ao clicar num botao que calculasse em cada linha de produto O iva (o iva que é calculado em função da taxa de iva e do preco). Ele tem de detetar se é iva de 6,13 ou 23. Ou se acharem melhor pegar neste meu codigo que é para enviar para a datagrid clacular lá diretamente o iva, mas o problema e que ao aumentar as quantidades o iva vai aumentar como eu aumento o preco e é ai que nao estro a conseguir. Deixo tambem o codigo que utilizo para calcular o iva
[code=vb]
For Each linha As DataGridViewRow In Ecravendas.DataGridView1.Rows
If linha.Cells(1).Value = produto Then
'soma as quantidades depois aplica na variavel o valor true
linha.Cells(1).Value = produto
linha.Cells(0).Value = linha.Cells(0).Value + quantidade
subtotal = linha.Cells(0).Value * preco
linha.Cells(3).Value = subtotal
Ecravendas.Lbtotal.Text = Format(subtotal, "0.00")
For Each colunas As DataGridViewRow In Ecravendas.DataGridView1.Rows
total1 = total1 + colunas.Cells(3).Value
colunas.Cells(4).Value = verifivarMotanteIVA
Next
Ecravendas.Lbtotal.Text = Format(total1, "0.00")
Localizado = True
Exit For
End If
End If
Next
If Localizado = False Then
'adicionar os valores como nova linha pois ele não localizou nenhum registro no datagrid
subtotal = quantidade * preco
Ecravendas.Lbtotal.Text = subtotal.ToString()
Ecravendas.DataGridView1.Rows.Add(New String() {quantidade, produto, iva, subtotal})
soma = total + subtotal
Ecravendas.Lbtotal.Text = soma.ToString()
End If
[/code]
[code=vb]
Dim PrecoComIVA, PrecoSemIVA, MotanteIVA As Double
Dim IVA6 As Integer = 6
Dim IVA23 As Integer = 23
Dim IVA13 As Integer = 13
For Each linha As DataGridViewRow In DataGridView1.Rows
If linha.Cells(2).Value = 6 Then
PrecoComIVA = Val(linha.Cells(3).Value)
PrecoSemIVA = FormatNumber(PrecoComIVA / ((IVA6 + 100) / 100), 2)
MotanteIVA = FormatNumber(PrecoSemIVA * (IVA6 / 100), 2)
linha.Cells(4).Value = MotanteIVA.ToString("###,##0.00")
If linha.Cells(2).Value = 23 Then
PrecoComIVA = Val(linha.Cells(3).Value)
PrecoSemIVA = FormatNumber(PrecoComIVA / ((IVA23 + 100) / 100), 2)
MotanteIVA = FormatNumber(PrecoSemIVA * (IVA23 / 100), 2)
linha.Cells(4).Value = MotanteIVA.ToString("###,##0.00")
If linha.Cells(2).Value = 13 Then
PrecoComIVA = Val(linha.Cells(3).Value)
PrecoSemIVA = FormatNumber(PrecoComIVA / ((IVA13 + 100) / 100), 2)
MotanteIVA = FormatNumber(PrecoSemIVA * (IVA13 / 100), 2)
linha.Cells(4).Value = MotanteIVA.ToString("###,##0.00")
Exit For
End If
End If
End If
Next
[/code]
-