Usuário com melhor resposta
ajuda com edição de dados pelo gridview

Pergunta
-
montei uma Aplicação desktop para estudar c# fiz acesso a dados inserção visuualização no gridview a filtragem de dados bom agora estou precisando de ajuda para editar dados do gridview
eu etentei desta forma criei um form de edição
e neste form eu fiz o sequinte criei as variavei poublicas referente as linhas do banco de dados
public string nome, senha, telefone, endereco, email, observacao, palavrachave; public string idUsuario;
e setei cada txt para cada variavel
txtcodigo.Text = idUsuario; txtNome.Text = nome; txtSenha.Text = senha; txtTelefone.Text = telefone; txtEndereco.Text = endereco; txtEmail.Text = email; txtObser.Text = observacao;
seguindo: no form que contem o grid view eu fiz a sequinte logica
primeiro criei uma variavel public int linha atual = 0
e no evento cellclick do grid eu atribui a variavel linha atual
private void dgFuncionarios_CellClick(object sender, DataGridViewCellEventArgs e) { linhaatual = int.Parse(e.RowIndex.ToString()); }
e para pegar os dados da linha fiz o sequiante código
private void obtemDadosGrid() { nome = dgFuncionarios[1, linhaatual].Value.ToString(); senha = dgFuncionarios[2, linhaatual].Value.ToString(); telefone = dgFuncionarios[3, linhaatual].Value.ToString(); endereco = dgFuncionarios[4, linhaatual].Value.ToString(); email = dgFuncionarios[5, linhaatual].Value.ToString(); observacao = dgFuncionarios[6, linhaatual].Value.ToString(); palavrachave = dgFuncionarios[7, linhaatual].Value.ToString(); }
no botão alterar dados eu fiz o sequinte codigo
private void btnEditar_Click(object sender, EventArgs e) { try { idUsuario = dgFuncionarios[0, linhaatual].Value.ToString(); } catch (Exception ex) { MessageBox.Show("Erro" + ex.Message); } if (linhaatual >= 0) { //obtem dados do datagridview e atribui as variveis definidas no formulario de edição obtemDadosGrid(); frm_usuedit frmUsuarioEdit = new frm_usuedit(); frmUsuarioEdit.idUsuario = idUsuario; frmUsuarioEdit.nome = nome; frmUsuarioEdit.senha = senha; frmUsuarioEdit.telefone = telefone; frmUsuarioEdit.endereco = endereco; frmUsuarioEdit.email = email; frmUsuarioEdit.observacao = observacao; frmUsuarioEdit.palavrachave = palavrachave; frmUsuarioEdit.ShowDialog(); dgFuncionarios.Update(); carregaDados(); } }
na teoria era para passar a linha atual selecionada do grid para o form de edição mas na pratica isto não acontece simplesmente quando dispara o evento click do botal editar o form abre com todos os campos limpos
alguem pf pode me dizer como eu posso realizar a edição dos dados que forem selecionado no grid ?
lembrando que o visual studio não retorna nenhum erro
- Editado draw4soft quinta-feira, 14 de abril de 2016 18:31 informaçoes complementares
Respostas
-
Para passar as informações pro teu form, você pode passar a linha inteira do teu Grid.
private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { if (dataGridView1.CurrentRow == null) return; var frm = new Form2(dataGridView1.CurrentRow); frm.Show(); }
No teu form de edição:
private readonly DataGridViewRow _pessoa; public Form2(DataGridViewRow pessoa) { InitializeComponent(); _pessoa = pessoa; } private void Form2_Load(object sender, EventArgs e) { label1.Text = _pessoa.Cells[0].Value.ToString(); textBox1.Text = _pessoa.Cells[1].Value.ToString(); }
Att,
Antero Marques
_______________________________________________________________________
Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta.
O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.
- Editado Antero Marques quinta-feira, 14 de abril de 2016 20:25
- Marcado como Resposta draw4soft quinta-feira, 14 de abril de 2016 20:49
Todas as Respostas
-
Boa tarde,
Poderia explicar o seu form de edição "frm_usuedit"?
Notei que você atribui ao "frmUsuarioEdit.nome = nome;"
No form edit você criou as variáveis publicas também? E você atribui o valor das mesmas ao "TextBox"?Att,
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
-
O ideal é você criar uma classe com todas as informações do cliente, com a classe criada, você pode manipular e persistir os dados de forma mais legível.
- Editado Poliana Dias quinta-feira, 14 de abril de 2016 19:28
-
sim todas as varias estão publicas e todas atribuídas a seus respectivos textBox
o codigo completo do formulário de edição
namespace SGO_Consultorio.Views { public partial class frm_usuedit : Form { public string nome, senha, telefone, endereco, email, observacao, palavrachave; public string idUsuario; public frm_usuedit() { InitializeComponent(); txtcodigo.Text = idUsuario; txtNome.Text = nome; txtSenha.Text = senha; txtTelefone.Text = telefone; txtEndereco.Text = endereco; txtEmail.Text = email; txtObser.Text = observacao; } private Boolean validaDados() { if (txtNome.Text == string.Empty) return false; if (txtEndereco.Text == string.Empty) return false; if (txtEndereco.Text == string.Empty) return false; if (txtEmail.Text == string.Empty) return false; if (txtObser.Text == string.Empty) return false; return true; } private void AlterarDados() { string strConnection = "Server=localhost;Database=sgoconsultorio;Uid=root;Pwd=224466;"; string strSQL = "UPDATE usuarios SET nome ='" + txtNome.Text.Replace("'", "''") + "', senha= '" + txtSenha.Text + "', telefone='" + txtTelefone.Text + "', endereco= '" + txtEndereco.Text + "', email='" + txtEmail.Text + "', observacao'" + txtObser.Text+"' WHERE idUsuario = " + int.Parse(idUsuario) + ""; MySqlConnection con = new MySqlConnection(strConnection); MySqlCommand cmdAlterar = new MySqlCommand(strSQL, con); try { con.Open(); cmdAlterar.ExecuteNonQuery(); MessageBox.Show("Dados Alterados com sucesso."); } catch (MySqlException myex) { MessageBox.Show("Error: " + myex.Message); } } private void btnGravar_Click(object sender, EventArgs e) { if (validaDados()) AlterarDados(); else MessageBox.Show("Dados Invalidos..."); txtNome.Focus(); return; } } }
-
-
Troca essas variáveis
public string nome, senha, telefone, endereco, email, observacao, palavrachave; public string idUsuario;
por uma classe. Exemplo:
public class Cliente() { public string idUsuario {get; set;} public string nome {get; set;} public string senha {get; set;} public string telefone {get; set;} public string endereco {get; set;} public string email {get; set;} public string observacao {get; set;} public string palavraChave {get; set;} }
private void obtemDadosGrid() { var cliente = new Cliente(); cliente.nome = dgFuncionarios[1, linhaatual].Value.ToString(); cliente.senha = dgFuncionarios[2, linhaatual].Value.ToString(); cliente.telefone = dgFuncionarios[3, linhaatual].Value.ToString(); cliente.endereco = dgFuncionarios[4, linhaatual].Value.ToString(); cliente.email = dgFuncionarios[5, linhaatual].Value.ToString(); cliente.observacao = dgFuncionarios[6, linhaatual].Value.ToString(); cliente.palavrachave = dgFuncionarios[7, linhaatual].Value.ToString(); }
Assim você altera nos outros métodos, mas antes verifica se a sua linha está sendo populado no evento da gridview.
-
Troca essas variáveis
public string nome, senha, telefone, endereco, email, observacao, palavrachave; public string idUsuario;
por uma classe. Exemplo:
public class Cliente() { public string idUsuario {get; set;} public string nome {get; set;} public string senha {get; set;} public string telefone {get; set;} public string endereco {get; set;} public string email {get; set;} public string observacao {get; set;} public string palavraChave {get; set;} }
private void obtemDadosGrid() { var cliente = new Cliente(); cliente.nome = dgFuncionarios[1, linhaatual].Value.ToString(); cliente.senha = dgFuncionarios[2, linhaatual].Value.ToString(); cliente.telefone = dgFuncionarios[3, linhaatual].Value.ToString(); cliente.endereco = dgFuncionarios[4, linhaatual].Value.ToString(); cliente.email = dgFuncionarios[5, linhaatual].Value.ToString(); cliente.observacao = dgFuncionarios[6, linhaatual].Value.ToString(); cliente.palavrachave = dgFuncionarios[7, linhaatual].Value.ToString(); }
Assim você altera nos outros métodos, mas antes verifica se a sua linha está sendo populado no evento da gridview.
eu fiz o breakpoint no evento do grid cellclick e esta retornando nulo para a variavel linhaatual eu tenho uma classe que eu usu pra inserir vou postar o codigo e vc me diz se posso aproveitar ela
namespace SGO_Consultorio.Models { class FunModel { private int uidusuario; private string unome; private string usenha; private string utelefone; private string uendereco; private string uemail; private string uobservacao; private string upalavachave; public int Uidusuario { get { return uidusuario; } set { uidusuario = value; } } public string Unome { get { return unome; } set { unome = value; } } public string Usenha { get { return usenha; } set { usenha = value; } } public string Utelefone { get { return utelefone; } set { utelefone = value; } } public string Uendereco { get { return uendereco; } set { uendereco = value; } } public string Uemail { get { return uemail; } set { uemail = value; } } public string Uobservacao { get { return uobservacao; } set { uobservacao = value; } } public string Upalavachave { get { return upalavachave; } set { upalavachave = value; } } } }
-
Para passar as informações pro teu form, você pode passar a linha inteira do teu Grid.
private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { if (dataGridView1.CurrentRow == null) return; var frm = new Form2(dataGridView1.CurrentRow); frm.Show(); }
No teu form de edição:
private readonly DataGridViewRow _pessoa; public Form2(DataGridViewRow pessoa) { InitializeComponent(); _pessoa = pessoa; } private void Form2_Load(object sender, EventArgs e) { label1.Text = _pessoa.Cells[0].Value.ToString(); textBox1.Text = _pessoa.Cells[1].Value.ToString(); }
Att,
Antero Marques
_______________________________________________________________________
Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta.
O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.
- Editado Antero Marques quinta-feira, 14 de abril de 2016 20:25
- Marcado como Resposta draw4soft quinta-feira, 14 de abril de 2016 20:49
-
Para passar as informações pro teu form, você pode passar a linha inteira do teu Grid.
private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { if (dataGridView1.CurrentRow == null) return; var frm = new Form2(dataGridView1.CurrentRow); frm.Show(); }
No teu form de edição:
private readonly DataGridViewRow _pessoa; public Form2(DataGridViewRow pessoa) { InitializeComponent(); _pessoa = pessoa; } private void Form2_Load(object sender, EventArgs e) { label1.Text = _pessoa.Cells[0].Value.ToString(); textBox1.Text = _pessoa.Cells[1].Value.ToString(); }
Att,
Antero Marques
_______________________________________________________________________
Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta.
O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.
- Editado draw4soft quinta-feira, 14 de abril de 2016 20:49 agradecimento
-
Troca essas variáveis
public string nome, senha, telefone, endereco, email, observacao, palavrachave; public string idUsuario;
por uma classe. Exemplo:
public class Cliente() { public string idUsuario {get; set;} public string nome {get; set;} public string senha {get; set;} public string telefone {get; set;} public string endereco {get; set;} public string email {get; set;} public string observacao {get; set;} public string palavraChave {get; set;} }
private void obtemDadosGrid() { var cliente = new Cliente(); cliente.nome = dgFuncionarios[1, linhaatual].Value.ToString(); cliente.senha = dgFuncionarios[2, linhaatual].Value.ToString(); cliente.telefone = dgFuncionarios[3, linhaatual].Value.ToString(); cliente.endereco = dgFuncionarios[4, linhaatual].Value.ToString(); cliente.email = dgFuncionarios[5, linhaatual].Value.ToString(); cliente.observacao = dgFuncionarios[6, linhaatual].Value.ToString(); cliente.palavrachave = dgFuncionarios[7, linhaatual].Value.ToString(); }
Assim você altera nos outros métodos, mas antes verifica se a sua linha está sendo populado no evento da gridview.
-
-