none
ajuda com edição de dados pelo gridview RRS feed

  • 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 

    foto do form

    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
    quinta-feira, 14 de abril de 2016 18:28

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
    quinta-feira, 14 de abril de 2016 20:25

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.

    quinta-feira, 14 de abril de 2016 19:06
  • 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
    quinta-feira, 14 de abril de 2016 19:26
  • 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;
            }
    
        }
    }
    

    quinta-feira, 14 de abril de 2016 19:42
  • sim mas estou aprendendo eu ainda não sei usar esse tipo de classes sei usar para gravar mas para visualizar e manipular não sei 
    quinta-feira, 14 de abril de 2016 19:44
  • 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.


    quinta-feira, 14 de abril de 2016 19:56
  • 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; }
            }
        }
    }

    quinta-feira, 14 de abril de 2016 20:13
  • 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
    quinta-feira, 14 de abril de 2016 20:25
  • 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.


    vou realizar os testes( Funcionando Perfeitamente muito obrigado!)
    • Editado draw4soft quinta-feira, 14 de abril de 2016 20:49 agradecimento
    quinta-feira, 14 de abril de 2016 20:30
  • 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.


    mas estou extremamente interessado em aprender sobre classe se puder me orientar vou agradecer muito 
    quinta-feira, 14 de abril de 2016 20:54
  • Pesquise sobre Orientação a objetos e Solid.
    sexta-feira, 15 de abril de 2016 11:15
  • Pesquise sobre Orientação a objetos e Solid.
    obrigado estou pesquisando
    sexta-feira, 15 de abril de 2016 20:56