none
Agrupando linhas da DataGridView RRS feed

  • Pergunta

  • Olá pessoal.

    Dei uma pesquisada na internet mas não encontrei uma solução para o meu problema.. pelo menos, não em VB.NET. rs

    Tenho uma DataGridView que mostra todas as vendas do mês feitas por um determinado cliente.
    E dentro dessa grid, aparecem vários produtos iguais, ou seja, linhas repetidas.

    Gostaria de saber se teria como eu agrupar essas linhas dentro da DataGridView.

    Por exemplo, minha grid carrega assim:

    PROD.-VAL_UNIT.-QTDE-VAL_TOTAL

    abc - 10,00 - 1 - 10,00
    abc - 5,00 - 1 -  5,00
    abc - 10,00- 1- 10,00

    Mas eu queria que aparecesse assim:

     

    PROD.-VAL_UNIT.-QTDE-VAL_TOTAL

    abc - 10,00 - 2 - 20,00
    abc - 5,00 - 1 -  5,00

     

     

    Tem como fazer isso usando alguma propriedade da DataGridView ?

     

    Agradeço desde já pela atenção

    s.ono

    quinta-feira, 4 de novembro de 2010 15:51

Respostas

  • Eu não conheço nenhuma propiedade que faça isso...

    Fiz um método(gambiarra) que faz isso:

    For i As Integer = 0 To DataGridView1.RowCount - 1
     If i < DataGridView1.RowCount - 1 Then
     For j As Integer = i + 1 To DataGridView1.RowCount - 1
     If j < DataGridView1.RowCount - 1 Then
     If DataGridView1.Rows(i).Cells(0).Value.ToString() = DataGridView1.Rows(j).Cells(0).Value.ToString()  And _
      DataGridView1.Rows(i).Cells(1).Value.ToString() = DataGridView1.Rows(j).Cells(1).Value.ToString() Then
     DataGridView1.Rows(i).Cells(2).Value = _
      CDbl(DataGridView1.Rows(i).Cells(2).Value) + _
      CDbl(DataGridView1.Rows(j).Cells(2).Value)
     DataGridView1.Rows(i).Cells(3).Value = _
      CDbl(DataGridView1.Rows(i).Cells(3).Value) + _
      CDbl(DataGridView1.Rows(j).Cells(3).Value)
     DataGridView1.Rows.RemoveAt(j)
     j += -1
     End If
     End If
     Next
     End If
    Next
    

    Ele faz o que você precisa...não sei se é a melhor forma...

    Mas qualquer coisa...ta ai...xD


    Att. Osni
    • Sugerido como Resposta AndreAlvesLimaModerator quinta-feira, 4 de novembro de 2010 23:18
    • Marcado como Resposta s.ono sexta-feira, 5 de novembro de 2010 12:05
    quinta-feira, 4 de novembro de 2010 16:38

Todas as Respostas

  • Eu não conheço nenhuma propiedade que faça isso...

    Fiz um método(gambiarra) que faz isso:

    For i As Integer = 0 To DataGridView1.RowCount - 1
     If i < DataGridView1.RowCount - 1 Then
     For j As Integer = i + 1 To DataGridView1.RowCount - 1
     If j < DataGridView1.RowCount - 1 Then
     If DataGridView1.Rows(i).Cells(0).Value.ToString() = DataGridView1.Rows(j).Cells(0).Value.ToString()  And _
      DataGridView1.Rows(i).Cells(1).Value.ToString() = DataGridView1.Rows(j).Cells(1).Value.ToString() Then
     DataGridView1.Rows(i).Cells(2).Value = _
      CDbl(DataGridView1.Rows(i).Cells(2).Value) + _
      CDbl(DataGridView1.Rows(j).Cells(2).Value)
     DataGridView1.Rows(i).Cells(3).Value = _
      CDbl(DataGridView1.Rows(i).Cells(3).Value) + _
      CDbl(DataGridView1.Rows(j).Cells(3).Value)
     DataGridView1.Rows.RemoveAt(j)
     j += -1
     End If
     End If
     Next
     End If
    Next
    

    Ele faz o que você precisa...não sei se é a melhor forma...

    Mas qualquer coisa...ta ai...xD


    Att. Osni
    • Sugerido como Resposta AndreAlvesLimaModerator quinta-feira, 4 de novembro de 2010 23:18
    • Marcado como Resposta s.ono sexta-feira, 5 de novembro de 2010 12:05
    quinta-feira, 4 de novembro de 2010 16:38
  • Por que vc não faz um group by no seu select para agrupar os produtos da forma de como deseja?

    Assim fica melhor. 

     

    Espero ter ajudado


    Rebeca bjs
    quinta-feira, 4 de novembro de 2010 17:21
  • quinta-feira, 4 de novembro de 2010 18:25
  • Deu certinho aqui.  =D

    Muito obrigada pela ajuda de todos.

    sexta-feira, 5 de novembro de 2010 12:06