Usuário com melhor resposta
Problema para atualizar o dataGridView

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
{
}
}
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 -
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
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 -
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