none
Datagridview - datasource - propriedade Count RRS feed

  • Pergunta

  • Não sei o que está acontecendo com este trecho do meu código:

    Tenho um datagridview que é preenchido com datasource (ListaGrps é um comando Linq).

    Logo após adicionar um registro com o Entities (context.PES_GRUPOS.Add(grp);), deve carregar novamente o DGV. Quando passa pela linha do datasource, a propriedade Count é = 1.

    Só que na linha seguinte, o Rows.Count do DGV é zero! Mas o registro novo está lá na base de dados.

                dgvGrupos.DataSource = grp.ListaGrps(_idPess);

                if (dgvGrupos.Rows.Count > 0) { .... }

    terça-feira, 29 de agosto de 2017 00:54

Respostas

  • Paulo,

    Desculpe, falha minha, não havia entendido que era Windows Form. No caso, a propriedade .Rows só será preenchida quando a renderização terminar, você pode usar o evento DataGridView.DataBindingComplete pra isso.

    Referência: https://stackoverflow.com/questions/17618992/datagridview-rows-are-0-even-though-i-have-a-datasource


    ​Rafael Esquiçato Professional Scrum Master MCP, MCTS

    quarta-feira, 30 de agosto de 2017 12:17

Todas as Respostas

  • Paulo,

    Você precisa executar o método .DataBind() do grid, é ele que vai fazer o bind do seu source para as linhas.


    ​Rafael Esquiçato Professional Scrum Master MCP, MCTS

    terça-feira, 29 de agosto de 2017 02:30
  • Olá, Rafael,

    Fiz

     dgvGrupos.DataSource = grp.ListaGrps(_idPess);
                dgvGrupos.DataBind();
                if (dgvGrupos.Rows.Count > 0)
                {

     mas aparece a mensagem:

    "DataGridView" não contém uma definição para "DataBind" e não foi possível encontrar nenhum método de extensão "DataBind" que aceite um primeiro argumento do tipo "DataGridView" (há uma diretiva de uso ou referência de assembly ausente?)

    Adicionei a referência System.Web.UI (embora não esteja programando para web), mas não fez diferença.


    quarta-feira, 30 de agosto de 2017 12:03
  • Paulo,

    Desculpe, falha minha, não havia entendido que era Windows Form. No caso, a propriedade .Rows só será preenchida quando a renderização terminar, você pode usar o evento DataGridView.DataBindingComplete pra isso.

    Referência: https://stackoverflow.com/questions/17618992/datagridview-rows-are-0-even-though-i-have-a-datasource


    ​Rafael Esquiçato Professional Scrum Master MCP, MCTS

    quarta-feira, 30 de agosto de 2017 12:17
  • Analisando melhor, vi que o problema é um pouco mais estranho. Quando existem dados da pessoa na tabela de Grupos e é acrescentado mais um registro, o datagridview atualiza corretamente. Mesmo que sejam todos os registros deletados, ao adicionar o primeiro a atualização ocorre perfeitamente.

    A falha aparece quando o formulário é aberto e a pessoa ainda não tem registro na tabela de Grupos. Ao adicionar um registro, os dados aparecem na tabela e o Datasource do datagridview aparentemente funciona (count = 1). Mas a propriedade .Rows.Count fica zerada.

    Assim parece que  os dados não foram incluídos e a tendência do usuário é repetir a digitação.

    Não sei se consegui explicar bem.
    quarta-feira, 30 de agosto de 2017 15:25