none
Carregar dados da Grid para outro form e preencher os campos RRS feed

  • Pergunta

  • Boa noite galera,

    tenho 2 forms, no primeiro form tenho 4 botoes e 1 grid,  quando o usuário selecionar uma linha no grid e clicar no botão ALTERAR que é um dos 4, quero que abre o outro form e preenche os textbox, combobox.

    Atualmente estou fazendo dessa maneira:

            private void btnAlterar_Click(object sender, EventArgs e)
            {
                DataGridViewRow SelectedRow = grvUsuarios.SelectedRows[0];
                FrmEditarUsuario editarUsuario = new FrmEditarUsuario(SelectedRow);
                editarUsuario.ShowDialog();

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using Empregabilidade_FAE.DAO;
    using Empregabilidade_FAE.BLL;
    
    namespace Empregabilidade_FAE.Telas
    {
        public partial class FrmEditarUsuario : Form
        {
            USUARIO usuario = new USUARIO();
            UsuarioDAO usuarios = new UsuarioDAO();
            PerfilBLL perfilBll = new PerfilBLL();
            int idUsuario = 0;
    
            public FrmEditarUsuario(DataGridViewRow row)
            {
                InitializeComponent();
    
                preencherCboPerfil();
    
                txtCodigo.Text = row.Cells[0].Value.ToString();
                txtUsuario.Text = row.Cells[1].Value.ToString();
                cbPerfil.Text = row.Cells[2].Value.ToString();
                if (row.Cells[3].Value.ToString() == "Ativo")
                {
                    cheAtivo.Checked = true;
                }
                else
                {
                    cheAtivo.Checked = false;
                }
    
            }
    }
    
            private void btnCancelar_Click(object sender, EventArgs e)
            {
                this.Close();
            }
    
            public void preencherCboPerfil()
            {
                cbPerfil.DataSource = perfilBll.BuscarTodos();
                cbPerfil.DisplayMember = "PERFIL1";
                cbPerfil.ValueMember = "ID_PERFIL";
            }
    
        }
    }
    

    neste caso eu passo a linha inteira e passa para o FORM 2, so que na grid eu tenho 4 atributos de uma tabela mais eu tenho na tabela uns 7 atributos, se eu precisar carregar no FORM 2 todos os 7 atributos eu ñ iriei conseguir fazer porque não esta na grid, como poderei fazer pra conseguir fazer isso 

    terça-feira, 19 de junho de 2012 23:26

Respostas

  • Resolvido o problema!

    no click do botão fiz assim:

            private void btnAlterar_Click(object sender, EventArgs e)
            {
                if (grvUsuarios.SelectedRows.Count > 0)
                {
                    DataGridViewRow SelectedRow = grvUsuarios.SelectedRows[0];
                    FrmEditarUsuario editarUsuario = new FrmEditarUsuario(SelectedRow);
                    editarUsuario.ShowDialog();
                }
                else
                {
                    MessageBox.Show("Selecione um registro!", "ATENÇÃO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

    e no from aonde vou preencher os campos:

    public FrmEditarUsuario(DataGridViewRow row)
            {
                InitializeComponent();
    
                preencherCboPerfil();
    
                txtCodigo.Text = row.Cells[0].Value.ToString();
    
                idUsuario = int.Parse(txtCodigo.Text);
    
                usuario = usuarios.Pesquisa(u => u.ID_USUARIO == idUsuario).First<USUARIO>();
    
                txtUsuario.Text = usuario.USUARIO1;
                cbPerfil.Text = usuario.PERFIL.PERFIL1;
                if (usuario.ATIVO == "Ativo")
                {
                    cheAtivo.Checked = true;
                }
                else
                {
                    cheAtivo.Checked = false;
                }
            }

    • Editado andy.kz quinta-feira, 21 de junho de 2012 21:03
    • Marcado como Resposta andy.kz quinta-feira, 21 de junho de 2012 21:03
    quinta-feira, 21 de junho de 2012 21:01

Todas as Respostas

  • Olá andy, primeiramente tem que ver o select que vc está fazendo. acredito que vc deva estar selecinoando apenas as 4 colunas que vc quer da tabela. Eu aconselho a fazer da seguinte maneira:

    Faz o select trazendo todas as colunas da tabela, na grid vc cria apenas as colunas que deseja exibir. Desta forma vc pode pegar os valores da consulta mesmo que as colunas não estejam aparecendo na grid.

    terça-feira, 19 de junho de 2012 23:58
  • Olá Marcelo, estou utilizando EF, mapiei as tabelas do banco, criei uma classe CRUD

    para Mostrar na grid eu tenho uma query, pq tenho atributos de 2 tabelas, segue a Query:

      private void Query()
            {
                var query = from u in contexto.USUARIO
                            join p in contexto.PERFIL on u.ID_PERFIL equals p.ID_PERFIL
                            select new Usuario { ID = u.ID_USUARIO, USUARIO = u.USUARIO1, PERFIL = p.PERFIL1, ATIVO = u.ATIVO };
                this.grvUsuarios.DataSource = query.ToList();
            }

    segue o Codigo da classe Usuario 
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Empregabilidade_FAE
    {
        public class Usuario
        {
            public int ID{get;set;}
            public string USUARIO{get;set;}
            public string PERFIL{get;set;}
            public string ATIVO {get; set;}
        }
    }
    
    se eu entendi nessa classe é pra colocar todas as colunas das tabelas e na query passar so o quero mostrar na grid, e depois no form aonde quero preencher os dados conforme a linha selecionada, iria usar essa classe?
    • Editado andy.kz quarta-feira, 20 de junho de 2012 00:11
    quarta-feira, 20 de junho de 2012 00:06
  • Não, passa tudo pra query. No controle grid vc cria manualmente as colunas  na propriedade Columns do grid crias colunas que vc quer exibir

    quarta-feira, 20 de junho de 2012 00:16
  • Marcelo, tem um exemplo pra ficar melhor
    quarta-feira, 20 de junho de 2012 00:21
  • ta, mais como irei fazer depois, pra quando eu selecionar uma linha da grid e clicar no botão Editar, abrir o form com os dados preenchido conforme a linha q selecionei
    quarta-feira, 20 de junho de 2012 00:23
  • Um exemplo eu não tenho, pq não uso entity frameowrk, já usei. Mas tá vendo aqui:

    txtCodigo.Text = row.Cells[0].Value.ToString();
                txtUsuario
    .Text = row.Cells[1].Value.ToString();
                cbPerfil
    .Text = row.Cells[2].Value.ToString();
    onde vc usa pra pegar row.Cells[coloca aqui a posição do valor que vc quer]

    aí vc vai ter que olhar na sua query a posição que vai ficar.

    quarta-feira, 20 de junho de 2012 00:39
  • Marcelo agradeço, mais não consegui fazer

    quarta-feira, 20 de junho de 2012 01:21
  • alguem??
    quarta-feira, 20 de junho de 2012 18:38
  • @Andy

    O teu codigo esta mal. Tu vais ter de declarar algumas variaves que vao pegar a informacao no datagridview e passar pra o outro form. tu vais de declarar estas variaveis no teu form2, depois chama no teu form1.

    Na pratica vai ficar desta forma, eu tenho um datgridview no form1. no form2 tenho 3 textbox que vao receber informacao do datagridview que esta no form1. 

    No form2 eu vou declarar tres string:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace Windows_T_Items
    {
        public partial class Form2 : Form
        {
            public string valor1;
            public string valor2;
            public string valor3;
            public Form2()
            {
                InitializeComponent();
            }

            private void Form2_Load(object sender, EventArgs e)
            {
                textBox1.Text = valor1;
                textBox2.Text = valor2;
                textBox3.Text = valor3;
            }
        }
    }

    Agora no form1 veja como eu fiz, no botao que chama o form2 coloca este codigo:

     private void button4_Click(object sender, EventArgs e)
            {
                Form2 frm2 = new Form2();

                if (this.dataGridView1.SelectedRows.Count > 0)
                {
                    for (int i = 0; i < this.dataGridView1.SelectedRows.Count; i++)
                        
                    {
                       frm2.valor1 = dataGridView1.Rows[i].Cells[0].Value.ToString();
                       frm2.valor2 = dataGridView1.Rows[i].Cells[1].Value.ToString();
                       frm2.valor3 = dataGridView1.Rows[i].Cells[2].Value.ToString();
                    }
    Assim ja funciona perfeitamente. Voce pode adapter este codigo como queiras. 
                   
                }
                frm2.Show();    
            }


    O Amor que Sinto por Ti, Apenas Deus e capaz de sentir e superar tal amor!

    quarta-feira, 20 de junho de 2012 22:08
    Moderador
  • Olá Malange - Levi,

    nessa forma que tu passou, não vai ter problema com dados que quero preencher em um texbox mais não esta na grid?

    não tem alguma forma de fazer parecido com o q eu fiz em ASP.NET

       protected void grvCategorias_SelectedIndexChanged(object sender, EventArgs e)
            {
                Session["ID_CATEGORIA"] = grvCategorias.SelectedDataKey["ID_CATEGORIA"].ToString();
    
                Response.Redirect("EditarCategoria.aspx");
            }

      protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    txtCdgCategoria.Text = Session["ID_CATEGORIA"].ToString();
    
                    idCategoria = int.Parse(txtCdgCategoria.Text);
    
                    categoria = categorias.Pesquisa(cat => cat.ID_CATEGORIA == idCategoria).First<CATEGORIA>();
    
                    txtCategoria.Text = categoria.NOME_CATEGORIA;
                }
            }


    • Editado andy.kz quarta-feira, 20 de junho de 2012 22:24
    quarta-feira, 20 de junho de 2012 22:19
  • Olá Malange - Levi,

    nessa forma que tu passou, não vai ter problema com dados que quero preencher em um texbox mais não esta na grid?

    não tem alguma forma de fazer parecido com o q eu fiz em ASP.NET

       protected void grvCategorias_SelectedIndexChanged(object sender, EventArgs e)
            {
                Session["ID_CATEGORIA"] = grvCategorias.SelectedDataKey["ID_CATEGORIA"].ToString();
    
                Response.Redirect("EditarCategoria.aspx");
            }

      protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    txtCdgCategoria.Text = Session["ID_CATEGORIA"].ToString();
    
                    idCategoria = int.Parse(txtCdgCategoria.Text);
    
                    categoria = categorias.Pesquisa(cat => cat.ID_CATEGORIA == idCategoria).First<CATEGORIA>();
    
                    txtCategoria.Text = categoria.NOME_CATEGORIA;
                }
            }


    pq vc n cria um object com suas propriedades que vc precisa passar carrega ela e passa via session?

    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC

    quinta-feira, 21 de junho de 2012 13:03
    Moderador
  • Seilor e como eu faria isso? isso que você falou seria pra fazer em webforms, mais eu quero fz isso eim WindowsForms
    • Marcado como Resposta andy.kz quinta-feira, 21 de junho de 2012 16:41
    • Não Marcado como Resposta andy.kz quinta-feira, 21 de junho de 2012 16:41
    • Editado andy.kz quinta-feira, 21 de junho de 2012 16:41
    quinta-feira, 21 de junho de 2012 16:33
  • Resolvido o problema!

    no click do botão fiz assim:

            private void btnAlterar_Click(object sender, EventArgs e)
            {
                if (grvUsuarios.SelectedRows.Count > 0)
                {
                    DataGridViewRow SelectedRow = grvUsuarios.SelectedRows[0];
                    FrmEditarUsuario editarUsuario = new FrmEditarUsuario(SelectedRow);
                    editarUsuario.ShowDialog();
                }
                else
                {
                    MessageBox.Show("Selecione um registro!", "ATENÇÃO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

    e no from aonde vou preencher os campos:

    public FrmEditarUsuario(DataGridViewRow row)
            {
                InitializeComponent();
    
                preencherCboPerfil();
    
                txtCodigo.Text = row.Cells[0].Value.ToString();
    
                idUsuario = int.Parse(txtCodigo.Text);
    
                usuario = usuarios.Pesquisa(u => u.ID_USUARIO == idUsuario).First<USUARIO>();
    
                txtUsuario.Text = usuario.USUARIO1;
                cbPerfil.Text = usuario.PERFIL.PERFIL1;
                if (usuario.ATIVO == "Ativo")
                {
                    cheAtivo.Checked = true;
                }
                else
                {
                    cheAtivo.Checked = false;
                }
            }

    • Editado andy.kz quinta-feira, 21 de junho de 2012 21:03
    • Marcado como Resposta andy.kz quinta-feira, 21 de junho de 2012 21:03
    quinta-feira, 21 de junho de 2012 21:01
  • Bom dia.

    Eu estou com este mesmo problema.

    Tentei fazer conforme você postou, adaptando meu código com minhas necessidades, mas não funcionou, ao abrir o segundo Form, não carrega os dados da grid para as textbox.

    Poderia me ajudar?

    sexta-feira, 23 de setembro de 2016 13:43