none
Tratando DataGrid RRS feed

  • Pergunta

  • Boa noite,

    Estou com um código que procura pelas ID iguais no DataGrid e se ele encontra ele olha qual tem o maior valor e Deleta, pra isso eu estou utilizando o seguinte código:

            For Each dgv1Row As DataGridViewRow In DataGridView1.Rows
                i = i + 1
                For Each dgv2Row As DataGridViewRow In DataGridView1.Rows
    
                    If dgv1Row.Cells(0).Value = dgv2Row.Cells(0).Value And dgv1Row.Cells(20).Value > dgv2Row.Cells(20).Value Then
                        found = True
                    End If
                Next
    
                If found = True Then
                    DataGridView1.Rows.Remove(dgv1Row)
                    found = False
                End If
            Next
    O meu problema é o seguinte. Ele esta demorando uns 4 minutos para tratar 20 mil linhas. Alguém pode me ajudar para melhorar a velocidade do código?

    quarta-feira, 16 de abril de 2014 22:13

Respostas

  • Eduardo, vou te propor algo diferente.

    Esse datagrid é abastecido por um SELECT no banco de dados certo?

    Trate isso no SELECT. No argumento "WHERE" use "nome_do_campo = MIN(nome_do_campo)". Assim você só popula a datagrid com as linhas que são de fato o mínimo. Ou se for só para excluir o valor máximo, mas todos os outros valores entre o mínimo e máximo forem poupados, então faça no "WHERE" o critério "NOT nome_do_campo = MAX(nome_do_campo)".

    • Marcado como Resposta Giovani Cr terça-feira, 22 de abril de 2014 18:44
    terça-feira, 22 de abril de 2014 12:18

Todas as Respostas

  • Você poderia utilizar uma Coleção List<T> para preencher o datagrid e fazer esse tratamento diretamente na coleção, vai ser mais rapido do que olhar a cada iteração todas as 20mil linhas...
    quinta-feira, 17 de abril de 2014 17:18
  • Você poderia utilizar uma Coleção List<T> para preencher o datagrid e fazer esse tratamento diretamente na coleção, vai ser mais rapido do que olhar a cada iteração todas as 20mil linhas...
    Desculpe, não entendi. Poderia me explicar melhor?
    quinta-feira, 17 de abril de 2014 20:22
  • Eduardo, vou te propor algo diferente.

    Esse datagrid é abastecido por um SELECT no banco de dados certo?

    Trate isso no SELECT. No argumento "WHERE" use "nome_do_campo = MIN(nome_do_campo)". Assim você só popula a datagrid com as linhas que são de fato o mínimo. Ou se for só para excluir o valor máximo, mas todos os outros valores entre o mínimo e máximo forem poupados, então faça no "WHERE" o critério "NOT nome_do_campo = MAX(nome_do_campo)".

    • Marcado como Resposta Giovani Cr terça-feira, 22 de abril de 2014 18:44
    terça-feira, 22 de abril de 2014 12:18