none
Problema para atualizar o dataGridView RRS feed

  • Pergunta

  • Boa tarde,

    não estou conseguindo fazer com que o DGV atualize após eu inserir novos dados no form(os textbox para inserir dados está no mesmo form do DGV), gostaria de saber como eu posso fazer com que, após inserido dados, apareça no DGV sem que eu tenha que fechar e abrir o form.

    Obrigado!

    Código do botão que insere novos dados:

    private void btnGravar_Click(object sender, EventArgs e)
            {
                try
                {
                    //Instancia o SqlConnection
                    SqlConnection conn = new SqlConnection(@"Data Source=luiz-pc\SQLEXPRESS;Initial Catalog=PIM_DB;Integrated Security=True;Pooling=False");

                    //Instancia do SqlCommand
                    SqlCommand comm = new SqlCommand();
                    comm.Connection = conn;
                    //Instrução de inserir  e adicionar valor
                    comm.CommandText = "INSERT INTO Cliente (Nome, CPF, Telefone, Endereço)" + "VALUES (@Nome, @CPF, @Telefone, @Endereço)";
                    //Passando valor real da tela.
                    comm.Parameters.AddWithValue("@Nome", txtNome.Text);
                    comm.Parameters.AddWithValue("@CPF", txtCPF.Text);
                    comm.Parameters.AddWithValue("@Telefone", txtTelefone.Text);
                    comm.Parameters.AddWithValue("@Endereço", txtEndereco.Text);
                    //Abrir conexão
                    conn.Open();
                    comm.ExecuteNonQuery();
                    conn.Close();
                    //Exibir inserção com sucesso
                    if (txtNome.Text != string.Empty && txtCPF.Text != string.Empty && txtTelefone.Text != string.Empty && txtEndereco.Text != string.Empty)
                    {
                        MessageBox.Show("Dados atualizados com sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    }
                    else
                    {
                        MessageBox.Show("Informe os valores corretamente para completar o cadastro.", "Erro do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                catch
                {

                }
            }

    terça-feira, 8 de dezembro de 2015 14:01

Respostas

  • Voce precisa chamar, o método para carregar o Grid após a inserir ou atualizar dados.

    Dentro do botão btnGravar_Click voce deve colocar a chamada para carregar o grid.
    Exemplo:
    dgCredores.DataSource = listaCliente.Tables("Cliente")

    O "listaCliente" representa a chamada que você tem quando carrega o Form pela primeira vez.
    Veja no seu código como o datagrid é carregado.

    Abraços
    JoseBonfim

    • Sugerido como Resposta Marcos SJ terça-feira, 8 de dezembro de 2015 18:15
    • Marcado como Resposta Marcos SJ terça-feira, 8 de dezembro de 2015 19:59
    terça-feira, 8 de dezembro de 2015 15:20
  • Boa tarde.

    A ideia do Jose é válida, porém caso tu não queiras ficar fazendo consultas no banco de dados toda hora (fazer um select de todos registros), tu podes fazer o seguinte (mais feio):

    int id = new Random().Next(); // geração de Id randômico
    
                Pessoa pessoa = new Pessoa
                {
                    Id = id,
                    Nome = "Pessoa " + id
                }; // Criação de objeto para testes
    
                List<Pessoa> lstPessoas = (List<Pessoa>)dataGridView1.DataSource; // recuperação do DataSource atual
                lstPessoas.Add(pessoa); // modificação da Source
    
                dataGridView1.DataSource = null;
                dataGridView1.DataSource = lstPessoas; // "reload" da source da DataGrid

    Ou dessa forma:

    int id = new Random().Next();
    
                Pessoa pessoa = new Pessoa
                {
                    Id = id,
                    Nome = "Pessoa " + id
                };
    
                BindingList<Pessoa> lstPessoas = (BindingList<Pessoa>)dataGridView1.DataSource;
                lstPessoas.Add(pessoa);

    Lembrando que tu precisas ou retornar do banco o registro inserido pra adicionar na Source ou inserir o registro e só retornar o ID, modificando o objeto que foi inserido no banco, para ser inserido na Source.


    Att., Rafael Simor


    • Editado SimorC terça-feira, 8 de dezembro de 2015 16:26
    • Sugerido como Resposta Marcos SJ terça-feira, 8 de dezembro de 2015 18:15
    • Marcado como Resposta Marcos SJ terça-feira, 8 de dezembro de 2015 19:59
    terça-feira, 8 de dezembro de 2015 16:25

Todas as Respostas

  • Voce precisa chamar, o método para carregar o Grid após a inserir ou atualizar dados.

    Dentro do botão btnGravar_Click voce deve colocar a chamada para carregar o grid.
    Exemplo:
    dgCredores.DataSource = listaCliente.Tables("Cliente")

    O "listaCliente" representa a chamada que você tem quando carrega o Form pela primeira vez.
    Veja no seu código como o datagrid é carregado.

    Abraços
    JoseBonfim

    • Sugerido como Resposta Marcos SJ terça-feira, 8 de dezembro de 2015 18:15
    • Marcado como Resposta Marcos SJ terça-feira, 8 de dezembro de 2015 19:59
    terça-feira, 8 de dezembro de 2015 15:20
  • Boa tarde.

    A ideia do Jose é válida, porém caso tu não queiras ficar fazendo consultas no banco de dados toda hora (fazer um select de todos registros), tu podes fazer o seguinte (mais feio):

    int id = new Random().Next(); // geração de Id randômico
    
                Pessoa pessoa = new Pessoa
                {
                    Id = id,
                    Nome = "Pessoa " + id
                }; // Criação de objeto para testes
    
                List<Pessoa> lstPessoas = (List<Pessoa>)dataGridView1.DataSource; // recuperação do DataSource atual
                lstPessoas.Add(pessoa); // modificação da Source
    
                dataGridView1.DataSource = null;
                dataGridView1.DataSource = lstPessoas; // "reload" da source da DataGrid

    Ou dessa forma:

    int id = new Random().Next();
    
                Pessoa pessoa = new Pessoa
                {
                    Id = id,
                    Nome = "Pessoa " + id
                };
    
                BindingList<Pessoa> lstPessoas = (BindingList<Pessoa>)dataGridView1.DataSource;
                lstPessoas.Add(pessoa);

    Lembrando que tu precisas ou retornar do banco o registro inserido pra adicionar na Source ou inserir o registro e só retornar o ID, modificando o objeto que foi inserido no banco, para ser inserido na Source.


    Att., Rafael Simor


    • Editado SimorC terça-feira, 8 de dezembro de 2015 16:26
    • Sugerido como Resposta Marcos SJ terça-feira, 8 de dezembro de 2015 18:15
    • Marcado como Resposta Marcos SJ terça-feira, 8 de dezembro de 2015 19:59
    terça-feira, 8 de dezembro de 2015 16:25