none
Percorrer linhas datagridview como FOR RRS feed

  • 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]

    quinta-feira, 24 de abril de 2014 17:27

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
    sexta-feira, 25 de abril de 2014 18:06

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
    quinta-feira, 24 de abril de 2014 17:44
  • 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]

    sexta-feira, 25 de abril de 2014 09:53
  • 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

    sexta-feira, 25 de abril de 2014 12:20
  • Jonnathanvb ja procedi à correcao mas da me este erro 'Rows' is not a member of 'System.Windows.Forms.DataGridViewRow'.
    sexta-feira, 25 de abril de 2014 14:41
  • 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
    sexta-feira, 25 de abril de 2014 16:58
  • 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]

    sexta-feira, 25 de abril de 2014 17:17
  • 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
    sexta-feira, 25 de abril de 2014 18:06
  • 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]

    segunda-feira, 28 de abril de 2014 23:09
  • jotamax, não min entenda mal, mais porfavor abrir uma nova thead com a duvida.

    se posivel coloque a duvida com uma imagem do formulario.

    terça-feira, 29 de abril de 2014 01:16
  • A nova thead é esta http://social.msdn.microsoft.com/Forums/pt-BR/c49ee019-acb3-41be-a1af-903164185fa8/eliminar-linhas-na-datagridview?forum=vsvbasicpt
    terça-feira, 29 de abril de 2014 10:58
  • 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]

     

    quinta-feira, 1 de maio de 2014 15:10
  • não deu pra entender o que vc quiz dizer, lembre - se, essa thread foi fechada, abra uma nova thread com imagem da tela se possivel.
    segunda-feira, 5 de maio de 2014 15:55