Usuário com melhor resposta
Como passar todas as linhas de uma datagrid para outra.

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 ?
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
-
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!
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
-
-
-
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.
-
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
-
-
-
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!
-
Por gentileza, finalize a thread marcando a resposta correta.
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.
-
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
-
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.- Editado Aristides Darlan Peiter Tondolo quarta-feira, 27 de janeiro de 2016 13:38
-
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"
- Editado Aristides Darlan Peiter Tondolo quarta-feira, 27 de janeiro de 2016 13:38
-
Vou marcar a reposta pra você, mas em suas proximas threads use o link
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.
-
-
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. -
-
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