none
Excluir List no Datagrid RRS feed

  • Pergunta

  • Boa tarde,

    Tenho um List, que carrego no datagrid, gostaria de ao selecionar uma linha no datagrid, excluí-la, porém de toda forma que tento me informa erro. Já criei uma variável com o índice, e mesmo assim não ocorre a exclusão.

    Já tentei assim(tentado na excluir na lista):

    lista.RemoveAt(0);

    Excluindo no datagrid(quando trago os dados direto do banco, essa forma funciona, mais como informei, os dados não estão no banco, é uma list, conforme o usuário vai incluindo, vai adicionando no datagridview):

    dgvprodutos.Rows.RemoveAt(dgvprodutos.CurrentRow.Index);

    Agradeço quem puder ajudar.


    sexta-feira, 28 de outubro de 2016 18:30

Respostas

Todas as Respostas

  • Boa tarde, Mariana.

    Qual a mensagem de erro?


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    sexta-feira, 28 de outubro de 2016 18:33
  • Juliano,

    Neste código, o erro é: Additional information: O índice estava fora do intervalo. Ele deve ser não-negativo e menor que o tamanho da coleção.

    Possui uma linha no datagrid.

    lista.RemoveAt(0);

    E excluindo pelo datagridview:

    dgvprodutos.Rows.RemoveAt(dgvprodutos.CurrentRow.Index);

    Additional information: Não é possível remover programaticamente as linhas, a menos que DataGridView seja limitado por dados para uma IBindingList com suporte para notificação de alteração e que permita exclusão.

    sexta-feira, 28 de outubro de 2016 18:37
  • Olá,

    Já tentou assim?

    dgvprodutos.Rows.Remove(dgvprodutos.CurrentRow);

    Dá uma olhada nessa thread: https://social.msdn.microsoft.com/Forums/pt-BR/eb23c991-5c21-407e-9d25-728968ad2fa0/excluir-linha-selecionada-na-gridview?forum=vscsharppt


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco


    sexta-feira, 28 de outubro de 2016 18:41
  • Já sim, me informa o mesmo erro: Não é possível remover programaticamente as linhas, a menos que DataGridView seja limitado por dados para uma IBindingList com suporte para notificação de alteração e que permita exclusão.

    Quando populo o datagrid com o select do banco consigo, porém como estou utilizando o list, está me informando este erro.

    sexta-feira, 28 de outubro de 2016 18:44
  • Se você faz o bind to DataGridView com uma lista, remova o item desta lista e mande o DataGridView atualizar seus dados.

    dgvprodutos.DataSource = null;
    dgvprodutos.DataSource = lista;

    Mas se o código abaixo der erro "O índice estava fora do intervalo", significa que você em algum momento limpou ou criou uma nova instância (vazia) da lista.

    lista.RemoveAt(0);

    Você pode também tentar da forma que este usuário sugeriu no StackOverflow: http://stackoverflow.com/a/21573629/1184708


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".






    sexta-feira, 28 de outubro de 2016 18:49
  • Continua no mesmo erro, já que a linha anterior que está ocasionando o erro:

    O erro está nessa linha:

    dgvprodutos.Rows.Remove(dgvprodutos.CurrentRow);

    sempre quando tento remover.

    sexta-feira, 28 de outubro de 2016 18:52
  • Muda um pouco como está carregando sua datagrid com seu list.

    Veja essa thread: http://stackoverflow.com/questions/21572273/datagridview-delete-row-when-datasource-is-listmyclass

    dataGridView1.DataSource = new BindingList<SuaClasse>(suaList.ToList());

    Testei aqui e funcionou.


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    sexta-feira, 28 de outubro de 2016 18:52
  • Obrigado André,

    Dessa forma eu consegui excluir, coloquei esse código para carregar, e utilizei esse para excluir:

    dataGridView1.DataSource = new BindingList<SuaClasse>(suaList.ToList());

    Mais agora ocorre o seguinte, por exemplo eu incluo uma linha, e excluo, se eu for incluir de novo, a linha que eu exclui aparece.

    • Marcado como Resposta Mariana C. Costa sexta-feira, 28 de outubro de 2016 19:23
    • Não Marcado como Resposta Mariana C. Costa sexta-feira, 28 de outubro de 2016 19:36
    sexta-feira, 28 de outubro de 2016 18:59
  • Mude seu bind para a forma abaixo e teste o Remove novamente.

    dgvprodutos.DataSource = new BindingList<TipoDaSuaListaGenerica>(suaListaGenerica);


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    • Marcado como Resposta Mariana C. Costa sexta-feira, 28 de outubro de 2016 19:23
    sexta-feira, 28 de outubro de 2016 19:00
  • Deve ser porque sua datagrid está voltando com os itens que existem na sua list, é preciso excluir/atualizar os itens da própria list também, caso o contrário os dados voltarão.

    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    sexta-feira, 28 de outubro de 2016 19:02
  • Tirando o .ToList(), deu certo, muito obrigado pela ajuda de vocês.
    sexta-feira, 28 de outubro de 2016 19:23