none
Como faço pra atualizar a DataGridView após ter mexido em sua DataSource por outro form? RRS feed

  • Pergunta

  • Tenho um frm que carrega os dados e os atualiza pra uma nova data, ai este form se "disposa" mas no frm da Dtgv continua a mesma data, só recarrega quando eu fecho e abro de novo. Como posso fazer pra atualizar isso via código?
    quarta-feira, 4 de novembro de 2015 01:03

Respostas

  • Olá Leo,

    Pelo que você falou você tem uma tela que carrega um DataGridView do banco de dados, e abre outro formulário para editar um dos registros. A solução para o seu problema pode variar de acordo com a forma que você desenvolveu isso.

    Por exemplo, se na tela aonde você dá o Bind (Fill) no DataGridView definindo por exemplo um DataSet ou um DataTable como seu DataSource. Para que o registro editado no outro formulário possa atualizar o datagridview você tem que persistir o registro editado dentro do DataRow do seu DataTable e passar esta informação de volta para o form onde se encontra o DataGridView. Você pode passar o DataTable entre os formulários através de propriedades publicas, ou no método de inicialização do form, algo do tipo. Então talvez está possa ser uma solução considerando a forma como me parece que você desenvolveu. Lembrando que você tem que reatribuir o DataTable editado como DataSource do seu DataGridView (Fill / Bind). Feito isso você pode chamar o metodo Update e Refresh do DataGridView apenas para atualizar a interface, visto que você definiu o DataSet  ou DataTable com o registro editado proveniente do Form de edição.

    Uma outra forma que é muito mais simples. É você fazer uma consulta a  mais no formulário de edição, fazendo com que consequentemente não tenha que ficar gerenciando objetos em memória nem tem que ficar passando objetos complexos de um form para o outro. Você pode argumentar que teria que fazer uma consulta a mais no bando de dados para isto, mas com a tecnologias que temos hoje, isto não se justifica.

    Por exemplo na tela onde você mostra o DataGridView você cria um Método para carrega-lo a partir do banco de dados, este método  será chamado no Form_Load para carregar o DataGridView. Ao editar o registro do DataGridView em um outro Form, em vez de você passar um Objeto como um DataTable para ser editado e retornado, você pode passar apenas o ID do registro (normalmente um integer), no Form_Load do Form de edição você cria um Método para consultar apenas este registro do seu banco de dados através do ID, você edita os dados e persiste no banco de dados. Ao fechar o Form de Edição e Retornar ao Form onde está o DataGridView, basta você chamar o método que você criou para carregar o DataGridView (Fill), ou seja, o mesmo método chamado no Form_Load, ele neste caso, já vai atualizar o DataGridView, pois ele irá simplesmente consultar o banco de dados de novo e obter o registro atualizado persistido no From de edição.

    No link abaixo tem alguns exemplos de como carregar um DataGridView (Método GetData contendo o Fill) E outro métodos demonstrando como fazer o recarregamento, a unica diferença é que você fará isso entre formulários:

    https://msdn.microsoft.com/pt-br/library/vstudio/fbk67b6z(v=vs.100).aspx


    Se o post foi útil marque como resposta. - Advanced Web Application - MCP - Twitter: @mpghelli





    • Editado Marcus Paulo Couto quarta-feira, 4 de novembro de 2015 17:12
    • Marcado como Resposta Marcos SJ quinta-feira, 5 de novembro de 2015 12:28
    quarta-feira, 4 de novembro de 2015 16:53

Todas as Respostas

  • Olá Leo Cruz Work,

    Tudo bem?

    Poderia explicar um pouco mais sobre o contexto do que está fazendo?

    Atenciosamente


    Marcos Roberto de Souza Junior

    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 respostas que resolveram o seu problema. Essa e 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.

    quarta-feira, 4 de novembro de 2015 13:08
  • Eu tenho um form que tem uma DataGridView, ao dar um clique duplo ele abre um outro frm onde a pessoa atualiza uma Row na DataTable e fecha, mas quando este form se fecha, os valores do frm que tem a DataGridView só se atualizam quando eu fecho e abro de novo. Gostaria de saber como atualizar ele sem necessidade de sair e entrar no formulário novamente. Obrigado!
    quarta-feira, 4 de novembro de 2015 16:10
  • Olá Leo,

    Pelo que você falou você tem uma tela que carrega um DataGridView do banco de dados, e abre outro formulário para editar um dos registros. A solução para o seu problema pode variar de acordo com a forma que você desenvolveu isso.

    Por exemplo, se na tela aonde você dá o Bind (Fill) no DataGridView definindo por exemplo um DataSet ou um DataTable como seu DataSource. Para que o registro editado no outro formulário possa atualizar o datagridview você tem que persistir o registro editado dentro do DataRow do seu DataTable e passar esta informação de volta para o form onde se encontra o DataGridView. Você pode passar o DataTable entre os formulários através de propriedades publicas, ou no método de inicialização do form, algo do tipo. Então talvez está possa ser uma solução considerando a forma como me parece que você desenvolveu. Lembrando que você tem que reatribuir o DataTable editado como DataSource do seu DataGridView (Fill / Bind). Feito isso você pode chamar o metodo Update e Refresh do DataGridView apenas para atualizar a interface, visto que você definiu o DataSet  ou DataTable com o registro editado proveniente do Form de edição.

    Uma outra forma que é muito mais simples. É você fazer uma consulta a  mais no formulário de edição, fazendo com que consequentemente não tenha que ficar gerenciando objetos em memória nem tem que ficar passando objetos complexos de um form para o outro. Você pode argumentar que teria que fazer uma consulta a mais no bando de dados para isto, mas com a tecnologias que temos hoje, isto não se justifica.

    Por exemplo na tela onde você mostra o DataGridView você cria um Método para carrega-lo a partir do banco de dados, este método  será chamado no Form_Load para carregar o DataGridView. Ao editar o registro do DataGridView em um outro Form, em vez de você passar um Objeto como um DataTable para ser editado e retornado, você pode passar apenas o ID do registro (normalmente um integer), no Form_Load do Form de edição você cria um Método para consultar apenas este registro do seu banco de dados através do ID, você edita os dados e persiste no banco de dados. Ao fechar o Form de Edição e Retornar ao Form onde está o DataGridView, basta você chamar o método que você criou para carregar o DataGridView (Fill), ou seja, o mesmo método chamado no Form_Load, ele neste caso, já vai atualizar o DataGridView, pois ele irá simplesmente consultar o banco de dados de novo e obter o registro atualizado persistido no From de edição.

    No link abaixo tem alguns exemplos de como carregar um DataGridView (Método GetData contendo o Fill) E outro métodos demonstrando como fazer o recarregamento, a unica diferença é que você fará isso entre formulários:

    https://msdn.microsoft.com/pt-br/library/vstudio/fbk67b6z(v=vs.100).aspx


    Se o post foi útil marque como resposta. - Advanced Web Application - MCP - Twitter: @mpghelli





    • Editado Marcus Paulo Couto quarta-feira, 4 de novembro de 2015 17:12
    • Marcado como Resposta Marcos SJ quinta-feira, 5 de novembro de 2015 12:28
    quarta-feira, 4 de novembro de 2015 16:53