none
Como passar todas as linhas de uma datagrid para outra. RRS feed

  • Pergunta

  • Bom dia, amigos.

    Bom eu estou tentando fazer um procedimento de passar todos as linhas de uma datagrid para outra. Por exemplo:

    Em minha datagrid1 tenho informações que não consigo ordenar, eu fiz um teste que quando eu adiciono esse dados da datagrid1 para datagrid2, eu consigo ordenar na datagrid2. Estou tentando fazer esse procedimento com a query abaixo.

    Try
    
                With DataGridView3
    
                    .Columns.Add("PROMOTOR", "PROMOTOR")
                    .Columns.Add("FILIAL", "FILIAL")
                    .Columns.Add("QNT", "QNT")
                    .Columns.Add("VALOR", "VALOR")
    
                    .RowCount = DataGridView2.Rows.Count
    
                    .Columns("VALOR").ValueType = GetType(Decimal)
                    .Columns("VALOR").DefaultCellStyle.Format = "C"
    
                    .Rows(0).Cells("PROMOTOR").Value = DataGridView2.Rows(0).Cells("PROMOTOR").Value
                    .Rows(0).Cells("FILIAL").Value = DataGridView2.Rows(0).Cells("FILIAL_PROMOTOR").Value
                    .Rows(0).Cells("QNT").Value = DataGridView2.Rows(0).Cells("Qnt_Promotor").Value
                    .Rows(0).Cells("VALOR").Value = DataGridView2.Rows(0).Cells("Vlr_Promotor").Value
    
                    .Rows(1).Cells("PROMOTOR").Value = DataGridView2.Rows(1).Cells("PROMOTOR").Value
                    .Rows(1).Cells("FILIAL").Value = DataGridView2.Rows(1).Cells("FILIAL_PROMOTOR").Value
                    .Rows(1).Cells("QNT").Value = DataGridView2.Rows(1).Cells("Qnt_Promotor").Value
                    .Rows(1).Cells("VALOR").Value = DataGridView2.Rows(1).Cells("Vlr_Promotor").Value
    
                    .Rows(2).Cells("PROMOTOR").Value = DataGridView2.Rows(2).Cells("PROMOTOR").Value
                    .Rows(2).Cells("FILIAL").Value = DataGridView2.Rows(2).Cells("FILIAL_PROMOTOR").Value
                    .Rows(2).Cells("QNT").Value = DataGridView2.Rows(2).Cells("Qnt_Promotor").Value
                    .Rows(2).Cells("VALOR").Value = DataGridView2.Rows(2).Cells("Vlr_Promotor").Value
    
                    .Rows(3).Cells("PROMOTOR").Value = DataGridView2.Rows(3).Cells("PROMOTOR").Value
                    .Rows(3).Cells("FILIAL").Value = DataGridView2.Rows(3).Cells("FILIAL_PROMOTOR").Value
                    .Rows(3).Cells("QNT").Value = DataGridView2.Rows(3).Cells("Qnt_Promotor").Value
                    .Rows(3).Cells("VALOR").Value = DataGridView2.Rows(3).Cells("Vlr_Promotor").Value
    
                    .Rows(4).Cells("PROMOTOR").Value = DataGridView2.Rows(4).Cells("PROMOTOR").Value
                    .Rows(4).Cells("FILIAL").Value = DataGridView2.Rows(4).Cells("FILIAL_PROMOTOR").Value
                    .Rows(4).Cells("QNT").Value = DataGridView2.Rows(4).Cells("Qnt_Promotor").Value
                    .Rows(4).Cells("VALOR").Value = DataGridView2.Rows(4).Cells("Vlr_Promotor").Value
    
                End With
            Catch ex As Exception
    
            End Try

    Só que ela adiciona nas linhas determinas nas rows acima, só que na minha datagrid1 tem mais do que 5 linhas e meu código adiciona até a 5º linha. Porém minha datagrid1 tem mais do que 5 linhas e queria que todas as linhas da datagrid1 fosse para datagrid2. É possível ir todas as linhas da datagrid1 para datagrid2 de uma só vez ?

    terça-feira, 26 de janeiro de 2016 13:59

Respostas

  • Fepus

    Use a estrutura for:

    With DataGridView3
    	
    	.Columns.Add("PROMOTOR", "PROMOTOR")
    	.Columns.Add("FILIAL", "FILIAL")
    	.Columns.Add("QNT", "QNT")
    	.Columns.Add("VALOR", "VALOR")
    
    	.RowCount = DataGridView2.Rows.Count
    
    	.Columns("VALOR").ValueType = GetType(Decimal)
    	.Columns("VALOR").DefaultCellStyle.Format = "C"
    
    	for i = 0 to .RowCount - 1
    		
    		.Rows(i).Cells("PROMOTOR").Value = DataGridView2.Rows(i).Cells("PROMOTOR").Value
    		.Rows(i).Cells("FILIAL").Value = DataGridView2.Rows(i).Cells("FILIAL_PROMOTOR").Value
    		.Rows(i).Cells("QNT").Value = DataGridView2.Rows(i).Cells("Qnt_Promotor").Value
    		.Rows(i).Cells("VALOR").Value = DataGridView2.Rows(i).Cells("Vlr_Promotor").Value
    		
    	next
    
    End With

    Apesar que o fator ordernação não depende só do DataGridView depende como essas informações são vindas!

    Como você obtenha essas informações ? se for do banco é só ordernar os dados vindo do banco!???


    Fulvio C

    • Marcado como Resposta Marcos SJ quarta-feira, 27 de janeiro de 2016 13:30
    quarta-feira, 27 de janeiro de 2016 12:08
  • Exatamente, eu estava adicionando no datagrid como string. Eu passei adicionar como decimal, fiz a conversão para decimal e ficou do mesmo jeito. Então pesquisei e encontrei a solução para o meu problema. Segue a solução abaixo:

    Primeiro converti para decimal:

    FormatCurrency(Convert.ToDecimal(DataGridView3("VALOR", i).Value)

    Só que ficou com o mesmo problema. Eu acrescente esse código abaixo no evento: DataGridView4_SortCompare

    Funcionou muito bem.

    Private Sub DataGridView4_SortCompare( _
            ByVal sender As Object, ByVal e As DataGridViewSortCompareEventArgs) _
            Handles DataGridView4.SortCompare
    
            ' Try to sort based on the contents of the cell in the current column.
            e.SortResult = System.Decimal.Compare(e.CellValue1.ToString(), _
                e.CellValue2.ToString())
    
            ' If the cells are equal, sort based on the ID column.
            If (e.SortResult = 0) AndAlso Not (e.Column.Name = "VALOR") Then
                e.SortResult = System.Decimal.Compare( _
                    DataGridView4.Rows(e.RowIndex1).Cells("VALOR").Value.ToString(), _
                    DataGridView4.Rows(e.RowIndex2).Cells("VALOR").Value.ToString())
            End If
    
            e.Handled = True
    
        End Sub

    Caso alguém tenha a mesma dúvida, isso pode solucionar o problema. Obrigado a quem tentou me ajudar. Grato!


    • Editado Fepus quarta-feira, 27 de janeiro de 2016 13:31
    • Marcado como Resposta Fepus quarta-feira, 27 de janeiro de 2016 13:32
    quarta-feira, 27 de janeiro de 2016 13:20

Todas as Respostas

  • Boa tarde.

    Tenho uma datagrid com uma coluna chama VALOR, os valores que estão nesse campo não são ordenado corretamente, eu uso o código abaixo para ordenar as colunas. Mesmo eu clicando no cabeçalho do campo VALOR, ele não ordena corretamente.

    DataGridView4.Sort(DataGridView4.Columns(3), System.ComponentModel.ListSortDirection.Descending)

    Veja o procedimento nas imagens abaixo.

    Valor Ordenado do maior para o menor, tanto por código e por cabeçalho, fica assim.

    Campo VALOR, ordenado de menor para o maior, tanto por código e por cabeçalho. Fica assim.

    Alguém tem alguma solução pra isso ? existe outro método para resolver isso ?

    • Mesclado Marcos SJ quarta-feira, 27 de janeiro de 2016 13:03 Problema relacionado diretamente
    terça-feira, 26 de janeiro de 2016 19:48
  • Ninguém ?
    quarta-feira, 27 de janeiro de 2016 10:41
  • Alguém ?
    quarta-feira, 27 de janeiro de 2016 10:41
  • Bom dia Fepus,

     Nem sempre suas threads serão respondidas na integra, vai depender se alguém da comunidade que já passou pela mesma situação ou que saiba como te ajudar vai ter a diosponibilidade de responder sua thread.

    Atenciosamente


    Marcos SJ

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quarta-feira, 27 de janeiro de 2016 11:46
  • Fepus

    Use a estrutura for:

    With DataGridView3
    	
    	.Columns.Add("PROMOTOR", "PROMOTOR")
    	.Columns.Add("FILIAL", "FILIAL")
    	.Columns.Add("QNT", "QNT")
    	.Columns.Add("VALOR", "VALOR")
    
    	.RowCount = DataGridView2.Rows.Count
    
    	.Columns("VALOR").ValueType = GetType(Decimal)
    	.Columns("VALOR").DefaultCellStyle.Format = "C"
    
    	for i = 0 to .RowCount - 1
    		
    		.Rows(i).Cells("PROMOTOR").Value = DataGridView2.Rows(i).Cells("PROMOTOR").Value
    		.Rows(i).Cells("FILIAL").Value = DataGridView2.Rows(i).Cells("FILIAL_PROMOTOR").Value
    		.Rows(i).Cells("QNT").Value = DataGridView2.Rows(i).Cells("Qnt_Promotor").Value
    		.Rows(i).Cells("VALOR").Value = DataGridView2.Rows(i).Cells("Vlr_Promotor").Value
    		
    	next
    
    End With

    Apesar que o fator ordernação não depende só do DataGridView depende como essas informações são vindas!

    Como você obtenha essas informações ? se for do banco é só ordernar os dados vindo do banco!???


    Fulvio C

    • Marcado como Resposta Marcos SJ quarta-feira, 27 de janeiro de 2016 13:30
    quarta-feira, 27 de janeiro de 2016 12:08
  • Como você traz essas informações?

    Essas informações vem do banco de dados ?


    Fulvio C

    quarta-feira, 27 de janeiro de 2016 12:09
  • Olá, pode abrir a tabela e nos mandar um print da mesma?

    O problema provavelmente deve ser na forma como esses dados estão sendo gravados.

    quarta-feira, 27 de janeiro de 2016 12:34
  • Exatamente, eu estava adicionando no datagrid como string. Eu passei adicionar como decimal, fiz a conversão para decimal e ficou do mesmo jeito. Então pesquisei e encontrei a solução para o meu problema. Segue a solução abaixo:

    Primeiro converti para decimal:

    FormatCurrency(Convert.ToDecimal(DataGridView3("VALOR", i).Value)

    Só que ficou com o mesmo problema. Eu acrescente esse código abaixo no evento: DataGridView4_SortCompare

    Funcionou muito bem.

    Private Sub DataGridView4_SortCompare( _
            ByVal sender As Object, ByVal e As DataGridViewSortCompareEventArgs) _
            Handles DataGridView4.SortCompare
    
            ' Try to sort based on the contents of the cell in the current column.
            e.SortResult = System.Decimal.Compare(e.CellValue1.ToString(), _
                e.CellValue2.ToString())
    
            ' If the cells are equal, sort based on the ID column.
            If (e.SortResult = 0) AndAlso Not (e.Column.Name = "VALOR") Then
                e.SortResult = System.Decimal.Compare( _
                    DataGridView4.Rows(e.RowIndex1).Cells("VALOR").Value.ToString(), _
                    DataGridView4.Rows(e.RowIndex2).Cells("VALOR").Value.ToString())
            End If
    
            e.Handled = True
    
        End Sub

    Caso alguém tenha a mesma dúvida, isso pode solucionar o problema. Obrigado a quem tentou me ajudar. Grato!


    • Editado Fepus quarta-feira, 27 de janeiro de 2016 13:31
    • Marcado como Resposta Fepus quarta-feira, 27 de janeiro de 2016 13:32
    quarta-feira, 27 de janeiro de 2016 13:20
  • Fepus,

    Por gentileza, finalize a thread marcando a resposta correta.

    Obrigado.


    Marcos SJ

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quarta-feira, 27 de janeiro de 2016 13:23
  • Fepus

    Use a estrutura for:

    With DataGridView3
    	
    	.Columns.Add("PROMOTOR", "PROMOTOR")
    	.Columns.Add("FILIAL", "FILIAL")
    	.Columns.Add("QNT", "QNT")
    	.Columns.Add("VALOR", "VALOR")
    
    	.RowCount = DataGridView2.Rows.Count
    
    	.Columns("VALOR").ValueType = GetType(Decimal)
    	.Columns("VALOR").DefaultCellStyle.Format = "C"
    
    	for i = 0 to .RowCount - 1
    		
    		.Rows(i).Cells("PROMOTOR").Value = DataGridView2.Rows(i).Cells("PROMOTOR").Value
    		.Rows(i).Cells("FILIAL").Value = DataGridView2.Rows(i).Cells("FILIAL_PROMOTOR").Value
    		.Rows(i).Cells("QNT").Value = DataGridView2.Rows(i).Cells("Qnt_Promotor").Value
    		.Rows(i).Cells("VALOR").Value = DataGridView2.Rows(i).Cells("Vlr_Promotor").Value
    		
    	next
    
    End With

    Apesar que o fator ordernação não depende só do DataGridView depende como essas informações são vindas!

    Como você obtenha essas informações ? se for do banco é só ordernar os dados vindo do banco!???


    Fulvio C

    Fulvio, muito obrigado.
    quarta-feira, 27 de janeiro de 2016 13:23
  • O valor da coluna é sempre do tipo String. Neste caso, a ordenação está certa (R$ 2805.50 > R$ 18.990,02).
    É necessário implementar a comparação explícita, especificando o tipo dos dados.
    quarta-feira, 27 de janeiro de 2016 13:25
  • O mesmo acontece se você tenta ordenar colunas com valor de data.

    (Date)"01-11-2015" > (Date)"28-10-2015"

    mas "01-11-2015" < "28-10-2015"

    quarta-feira, 27 de janeiro de 2016 13:29
  • Fepus,

    Vou marcar a reposta pra você, mas em suas proximas threads use o link

    Atenciosamente


    Marcos SJ

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quarta-feira, 27 de janeiro de 2016 13:29
  • Apenas para contribuir, se sua segunda DGV tem a mesma estrutura que a primeira, bastaria fazer
    For Each rowDgv1 As DataGridViewRow In Me.dgv1.Rows
        Me.dgv2.add(rowDgv1)
    Next
    quarta-feira, 27 de janeiro de 2016 13:33
  • Provavelmente sua coluna está como String. Neste caso, a ordenação está certa (R$ 2805.50 > R$ 18.990,02).
    Verdade, como Fulvio, depende de como as informações estão passando para o objeto, se está como string vai ordenar como string. Conseguir entender. Obrigado a todos.
    quarta-feira, 27 de janeiro de 2016 13:35
  • Ok, obrigado. Entendido!
    quarta-feira, 27 de janeiro de 2016 13:35
  • Boa tarde,

    Em adição, favor consulte essas duas referências a fim de ordenar a gridview com sucesso.

    How to Sorting GridView Manually in Asp.net C# VB.Net

    GridView.SortExpression Propriedade

    Atenciosamente, Roberto Alves

    quarta-feira, 27 de janeiro de 2016 17:11