none
Preencher DataGridView que esta aberto em outro form RRS feed

  • Pergunta

  • Boa tarde!

    Tenho um form1 inicial que contem um grid, quando dou um click neste grid ele abre outro form2 e preenche os textbox de acordo com a linha selecionada, até ai tudo bem. No form2 realizo uma atualização e quando fecho gostaria que fosse feito um refresh do datagrid que esta no form1.

    Como poderia fazer isso?

    Abaixo seque o código onde tento preencher o grid.

     private void btnSalvar_Click(object sender, EventArgs e)
            {
                SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=SGLM;User ID=admin;Password=*******");
    
                SqlCommand comand = new SqlCommand("UPDATE ConfigTable SET Identificador = '" + txtIdentific.Text +
                                                                       "', ValorInicial = '" + txtValorInic.Text +
                                                                       "', Tamanho = '" + txtTamanho.Text +
                                                                       "', ValorPadrao = '" + txtValorPadrao.Text +
                                                                       "' WHERE Tabela = '"
                                                                       + txtTabela.Text + "' AND Coluna = '"
                                                                       + txtColuna.Text + "'", conn);
                conn.Open();
                comand.CommandType = CommandType.Text;
                comand.ExecuteNonQuery();
                conn.Close();
               
                DataTable dtb = new DataTable();
                dtb = Class1.CarregarTabelas(txtTabela.Text).Tables[0];
    
                DataGridView dgvTab = (DataGridView)frm1.Controls["dataGridView1"];
                dgvTab.DataSource = dtb.DefaultView;
                this.Close();
            }

    quarta-feira, 8 de maio de 2013 19:19

Respostas

  • Boa Noite!

    Para fechar o assunto.

    O dificuldade foi resolvida colocando referencia ao form1 no construtor do form2. 

      public partial class Form2 : Form
        {
    
            Form1 form1;
            public Form2(Form1 form1)
            {
                this.form1 = form1;
                InitializeComponent();
            }
    ...
    
     private void btnSalvar_Click(object sender, EventArgs e)
            {
    ...
    DataTable dtb = new DataTable();
                dtb = Class1.CarregarTabelas(txtTabela.Text).Tables[0];
                form1.dataGridView1.DataSource = dtb;
                this.Close();

    Agradeço a todos que opinaram.

     

    • Marcado como Resposta M. Almeida quarta-feira, 8 de maio de 2013 22:51
    quarta-feira, 8 de maio de 2013 22:51

Todas as Respostas

  • Eu não sei se é o seu caso, mas comigo aconteceu algo parecido. Eu tinha uma janela com datagrid e queria que as informações da opção que eu escolhi aparecessem em outra janela. Então eu teria que manipular dados entre duas janelas diferentes. Para isso eu eu instanciei a classe da janela que eu queria manipular. Por exemplo, se o janela era de cliente (public partial class Cliente : Window), eu criava a variável public static Cliente cli; e no construtor coloquei Cliente.cli = this;

    Lá da minha outra janela eu só precisava fazer referencia Cliente.cli.textBox1

    Você pode pôr um evento que seja ativado quando a janela for fechada, ou no fim de cada modificação. Provavelmente vc fez um código de listagem das informações do banco de dados para inserir no datagrid, ai vc só faz chamar de novo no método ativado quando a janela fechar. 

    No wpf se o método que eu criei para listar se chamar public static List<cliente> Visualizar() (Caso eu tenha vários clientes para visualizar), eu faria 

    List<cliente> lc = Clientes.Visualizar();

    dataGrid1.ItemsSource = lm;

    Caso esse datagrid esteja em outra janela, por exemplo a janela que eu tive que criar uma instância cli, eu faria:

    Cliente.cli.dataGrid1.ItemsSource = lm;

    Não sei se era isso que você queria. Talvez algumas coisas mudem ai no seu projeto por que vc tá trabalhando com forms né? Eu citei exemplos de WPF, mas acho que deve funcionar.

    quarta-feira, 8 de maio de 2013 19:33
  • olá,

    Veja como eu fiz, no meu Form2 eu coloquei um TextBox e criei um {get, set} que preenche e também retorna o valor contido no Text. veja:

      public string TextBoxValue
            {
                get { return textBox1.Text;} 
                set { textBox1.Text = value;}
            }   

    já no Form1 eu só criei uma instancia do Form2 e atribui o valor desejado:

     Form2 form2 = new Form2();
        form2.TextBoxValue = "Valor";
        form2.Show();


    Abs.
    Celso Zequim Junior
    http://csharpnamarra.blogspot.com/

    quarta-feira, 8 de maio de 2013 19:38
  • Boa tarde Gabriela!

    Tenho essa classe, onde realizo a transferência de um form para o outro. O que gostaria é, ao fechar o form2 onde eu realizei um update na tabela, o grid que esta no form1(Principal) fosse recarregado com as novas informações.

    Abaixo a classe que realiza a troca de informações entre os forms

      public static class Class1
        {
            private static string objectID_ = string.Empty;
            private static string identificador_ = string.Empty;
            private static string tabela_ = string.Empty;
            private static string coluna_ = string.Empty;
            private static string valorInicial_ = string.Empty;
            private static string tamanho_ = string.Empty;
            private static string valorPadrao_ = string.Empty;
            private static DataTable dt = null;
    
    
            public static DataSet CarregarTabelas(string dtable)
            {
                DataSet ds = new DataSet();
                SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=SGLM;User ID=admin;Password=*******");
    
                SqlCommand comand = new SqlCommand("SELECT * FROM ConfigTable WHERE Tabela = '" + dtable + "' ORDER BY Tabela", conn);
                conn.Open();
                comand.CommandType = CommandType.Text;
                SqlDataAdapter da = new SqlDataAdapter(comand);
                da.Fill(ds);
                conn.Close();
                return ds;
            }
            public static string ObjectID
            {
                get 
                {
                    return objectID_;
                }
                set 
                {
                    objectID_ = value;
                }
            }
    
            public static string Identificador
            {
                get
                {
                    return identificador_;
                }
                set
                {
                    identificador_ = value;
                }
            }
    
            public static string Tabela
            {
                get
                {
                    return tabela_;
                }
                set
                {
                    tabela_ = value;
                }
            }
    
            public static string Coluna
            {
    
                get
                {
                    return coluna_;
                }
                set
                {
                    coluna_ = value;
                }
            }
    
            public static string ValorInicial
            {
                get
                {
                    return valorInicial_;
                }
                set
                {
                    valorInicial_ = value;
                }
            }
            public static string Tamanho
            {
                get
                {
                    return tamanho_;
                }
                set
                {
                    tamanho_ = value;
                }
            }
    
            public static string ValorPadrao
            {
                get
                {
                    return valorPadrao_;
                }
                set
                {
                    valorPadrao_ = value;
                }
            }
        }

    quarta-feira, 8 de maio de 2013 19:44
  • Boa Tarde,

    fiz um teste aqui para lhe ajudar e funcionou perfeitamente, altere a propriedade do grid "modifiers"  para publica, agora faça a chamada desta forma

     Form1 frm = new Form1();
                frm.dataGridView1.Refresh();
    this.Close();

    Abração amigo.

    Se a Resposta foi Útil, por favor, Qualificar, Obrigado.

    quarta-feira, 8 de maio de 2013 19:45
  • Boa Tarde,

    fiz um teste aqui para lhe ajudar e funcionou perfeitamente, altere a propriedade do grid "modifiers"  para publica, agora faça a chamada desta forma

     Form1 frm = new Form1();
                frm.dataGridView1.Refresh();
    this.Close();

    Abração amigo.

    Se a Resposta foi Útil, por favor, Qualificar, Obrigado.

    Boa tarde PaulooDes!

    Fiz como descreveu, mas não funcionou. O código ficou assim.

    	    Form1 frm1 = new Form1();
                DataTable dtb = new DataTable();
                dtb = Class1.CarregarTabelas(txtTabela.Text).Tables[0];
    
               
                frm1.dataGridView1.DataSource = dtb.DefaultView;
                frm1.dataGridView1.Refresh();
                this.Close();

    quarta-feira, 8 de maio de 2013 19:55
  • remove o defaultView da tua Datatable

    fica apenas dtb


    A flower cannot blossom without sunshine, and man cannot live without love.

    quarta-feira, 8 de maio de 2013 20:03
    Moderador
  • Certo. Tente assim, instancie o form 1, e no form 2 vc diz que o dataGrid deve ser atualizado. 

    Como faz um tempo que mexi no Forms, não tenho certeza como faz, mas tente fazer o que fiz no WPF, crie um Form form1 = new Form ();

    Quando você vai preencher o datagrid vc deve por o nome do datagrid mais o método que seleciona as informações no banco, algo tipo... datagrid.Visualizar();

    Ai no form 2 vc chama form1.dataGrid1.Visualizar();

    Algo do tipo eu acho.

    quarta-feira, 8 de maio de 2013 20:05
  • remove o defaultView da tua Datatable

    fica apenas dtb


    A flower cannot blossom without sunshine, and man cannot live without love.

    Primeiramente agradeço a todos pelas respostas.

    Levi,

    Já havia tentado isso, e não deu certo.

    quarta-feira, 8 de maio de 2013 20:18
  • Certo. Tente assim, instancie o form 1, e no form 2 vc diz que o dataGrid deve ser atualizado. 

    Como faz um tempo que mexi no Forms, não tenho certeza como faz, mas tente fazer o que fiz no WPF, crie um Form form1 = new Form ();

    Quando você vai preencher o datagrid vc deve por o nome do datagrid mais o método que seleciona as informações no banco, algo tipo... datagrid.Visualizar();

    Ai no form 2 vc chama form1.dataGrid1.Visualizar();

    Algo do tipo eu acho.

    Gabriela,

    se entendi, isso ocorre desta forma.

    Form1 frm1 = new Form1();
                DataTable dtb = new DataTable();
                dtb = Class1.CarregarTabelas(txtTabela.Text).Tables[0];
    
               
                frm1.dataGridView1.DataSource = dtb.DefaultView;

    Chamo o metodo 

    Class1.CarregarTabelas(txtTabela.Text).Tables[0];

    que retorna um dataset.

    Preencho o DataTable

    DataTable dtb = new DataTable();
                dtb = Class1.CarregarTabelas(txtTabela.Text).Tables[0];

    tento preencher o grid que esta aberto no form1

    frm1.dataGridView1.DataSource = dtb.DefaultView;
                frm1.dataGridView1.Refresh();
                this.Close();

    o que não acontece.

    quarta-feira, 8 de maio de 2013 20:24
  • Boa Noite!

    Para fechar o assunto.

    O dificuldade foi resolvida colocando referencia ao form1 no construtor do form2. 

      public partial class Form2 : Form
        {
    
            Form1 form1;
            public Form2(Form1 form1)
            {
                this.form1 = form1;
                InitializeComponent();
            }
    ...
    
     private void btnSalvar_Click(object sender, EventArgs e)
            {
    ...
    DataTable dtb = new DataTable();
                dtb = Class1.CarregarTabelas(txtTabela.Text).Tables[0];
                form1.dataGridView1.DataSource = dtb;
                this.Close();

    Agradeço a todos que opinaram.

     

    • Marcado como Resposta M. Almeida quarta-feira, 8 de maio de 2013 22:51
    quarta-feira, 8 de maio de 2013 22:51