none
Preenchendo um dataGrid RRS feed

  • Pergunta

  • Boa noite pessoal. Me ajudem.

    Estou carregando um datatable. Dentro desse datatable existem várias linhas, cada linha é um registro na minha tabela de dados. Eu vou varrendo esse datatable e conforme eu vou varrendo ele, eu vou preenchendo um meu datagrid. Sempre que eu encontro um a linha no datatable que eu preciso alimentar o meu datagrid, o programa zera o datagrid e preenche apenas com a informação da condição. Como eu faço para não perder as informações que já estão no datagrid? O meu código:

                TotaisProdutosNFeBLL objTotaisProdutosNFe = new TotaisProdutosNFeBLL();
    
                DataTable dtTotaisProdutosNFe = objTotaisProdutosNFe.PesquisaTotaisProdutosNFeNumeroFilialDataUltimoMovimento(nFilialOrigem, dDataInicial, dDataFinal);
    
                MovimentoEstoqueBLL objMovimentoEstoque = new MovimentoEstoqueBLL();
    
                while (a < dtTotaisProdutosNFe.Rows.Count)
                {
                    cSerieNota = dtTotaisProdutosNFe.Rows[a]["Serie_Nota"].ToString();
                    nNumeroNota = Convert.ToInt32(dtTotaisProdutosNFe.Rows[a]["Numero_Nota"].ToString());
                    cCodigoProduto = dtTotaisProdutosNFe.Rows[a]["Codigo_Produto"].ToString();
    
                    dgvMovimentoEstoque.DataSource = objMovimentoEstoque.PesquisaMovimentoEstoqueNumeroFilialDataMovimentoSerieNFeArmazenamentoNumeroNFeArmazenamentoCodigoProdutoTipoNFe(
                        Convert.ToInt32(txtNumeroFilial.Text), dDataInicial, dDataFinal, cSerieNota, nNumeroNota, cCodigoProduto, cTipoNFe);
                    a++;
                }
    

    sábado, 13 de outubro de 2018 02:50

Respostas

  • Saudações.

    O que está acontecendo é que o seu DataTable está sendo chamado várias vezes e por isso a cada iteração do While ele sobrescreve o resultado anterior.

    Vejo que você está utilizando programação em camadas. O ideal é você fazer uma única consulta ao banco e preencher uma coleção, depois usar esta coleção para preencher o seu DataGridView.

    dgvMovimentoEstoque.DataSource  = minhaColecao;
    Atenciosamente,
    ____________________________________
    Agnaldo Guimarães
    site: exitcode.16mb.com/

    Se te ajudei, sinalize como "útil" e lembre-se de "marcar como resposta".
    Quando você marca como resposta os outros visitantes encontram a solução facilmente.

    ** Para que o mau prevaleça basta que os bons não façam nada....

    sábado, 13 de outubro de 2018 18:49

Todas as Respostas

  • Olá,

    O que está acontecer é que na tua iteração(while) está resetar a propriedade DataSource da grid com novos dados, tente ainda implementar esta solução usando uma DataTable intermediária o seu método merge para montar os dados que no fim da iteração passará na tua grid:

    TotaisProdutosNFeBLL objTotaisProdutosNFe = new TotaisProdutosNFeBLL();

    DataTable dtTotaisProdutosNFe = objTotaisProdutosNFe.PesquisaTotaisProdutosNFeNumeroFilialDataUltimoMovimento(nFilialOrigem, dDataInicial, dDataFinal);
    DataTable dtMontagem = new DataTable();

    MovimentoEstoqueBLL objMovimentoEstoque = new MovimentoEstoqueBLL();

    while (a < dtTotaisProdutosNFe.Rows.Count)
    {
        cSerieNota = dtTotaisProdutosNFe.Rows[a]["Serie_Nota"].ToString();
        nNumeroNota = Convert.ToInt32(dtTotaisProdutosNFe.Rows[a]["Numero_Nota"].ToString());
        cCodigoProduto = dtTotaisProdutosNFe.Rows[a]["Codigo_Produto"].ToString();

        dtMontagem.Merge(objMovimentoEstoque.PesquisaMovimentoEstoqueNumeroFilialDataMovimentoSerieNFeArmazenamentoNumeroNFeArmazenamentoCodigoProdutoTipoNFe(
                                         Convert.ToInt32(txtNumeroFilial.Text), dDataInicial, dDataFinal, cSerieNota, nNumeroNota, cCodigoProduto, cTipoNFe),false,MissingSchemaAction.Add);
        a++;
    }
    dgvMovimentoEstoque.DataSource = dtMontagem;

    Espero que te ajudou.

    sábado, 13 de outubro de 2018 18:46
  • Saudações.

    O que está acontecendo é que o seu DataTable está sendo chamado várias vezes e por isso a cada iteração do While ele sobrescreve o resultado anterior.

    Vejo que você está utilizando programação em camadas. O ideal é você fazer uma única consulta ao banco e preencher uma coleção, depois usar esta coleção para preencher o seu DataGridView.

    dgvMovimentoEstoque.DataSource  = minhaColecao;
    Atenciosamente,
    ____________________________________
    Agnaldo Guimarães
    site: exitcode.16mb.com/

    Se te ajudei, sinalize como "útil" e lembre-se de "marcar como resposta".
    Quando você marca como resposta os outros visitantes encontram a solução facilmente.

    ** Para que o mau prevaleça basta que os bons não façam nada....

    sábado, 13 de outubro de 2018 18:49