Jump to content

Como fazer refresh de uma datagrid no form1 a partir do form2?


rjcp
 Share

Recommended Posts

Olá a todos

Uma vez mais recorro aos conhecimentos de quem mais domina isto para ver se consigo desvendar este "mistério".

Como posso fazer refresh/reload/update de uma datagrid que está no form1 a partir do form2?

Obrigado desde já.

Link to comment
Share on other sites

Ora bem, o que se passa é que eu pretendo fazer um gestor de stocks e após adicionar um produto através de um FormAdicionarProduto e após clicar em OK, quero que a datagrid (que está no MainForm) seja actualizada.

O FormAdicionarProduto é chamado pelo MainForm.

Como já disse num dos posts anteriores, fiz uma função reloadDatagrid que é pública (sei que não convém muito mas neste caso creio que tem de ser mesmo assim) para que seja reconhecida no FormAdicionarProduto. De facto, ela é reconhecida mas, ao clicar no Botão OK do FormAdicionarProduto,  a datagrid do MainForm não é actualizada 😛

Espero ter sido suficientemente claro.

Obrigado pelo vosso tempo.

Ricardo.

Link to comment
Share on other sites

Sim com codigo era mais facil ajudar.

Estas a usar dataset para ires armazenado os dados ? ou colocas directamente os dados na grid ?

Se estas a usar datasets a grid é automaticamente "refrescada" (  😛   sempre quis usar este termo em português  🙂   ).

"There are two kinds of programmers. Those who write something to get the work done and those who want to write good code."João BrandãoWebsite e blog: http://jamab.blogspot.com/

Link to comment
Share on other sites

Então cá vai o código do FormAdicionarProduto:

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

namespace GestorDeStocks
{
    public partial class AdicionarProduto : Form
    {
        public AdicionarProduto()
        {
            InitializeComponent();
        }

        private bool isNumeric(string stringToCheck)
        {
            System.Text.RegularExpressions.Regex _isNumber =
                        new System.Text.RegularExpressions.Regex
                        (@"(^[-+]?\d+(,?\d*)*\.?\d*([Ee][-+]\d*)?$)|(^[-+]?\d?(,?\d*)*\.\d+([Ee][-+]\d*)?$)");
            return _isNumber.Match(stringToCheck).Success;
        }

        private void BtnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void BtnAdicionar_Click(object sender, EventArgs e)
        {
            if (textBoxCodigo.Text == null || textBoxCodigo.Text == "") 
            {
                DialogResult drCodigo = MessageBox.Show("Erro na base de dados. Contacte a manutenção!", "Gestor de Stocks v1.0", MessageBoxButtons.OK, MessageBoxIcon.Error);
                if (drCodigo == DialogResult.OK)
                {
                    this.Close();
                }
            }
            else
                if (textBoxNome.Text == null || textBoxNome.Text == "")
                {
                    DialogResult drNome = MessageBox.Show("Por favor, preencha o campo 'Nome'!", "Gestor de Stocks v1.0", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    if (drNome == DialogResult.OK)
                    {
                        return;
                    }
                }
                else
                    if (textBoxQuantidade.Text == null || textBoxQuantidade.Text == "")
                    {
                        DialogResult drQuantidade = MessageBox.Show("Por favor, preencha o campo 'Quantidade'!", "Gestor de Stocks v1.0", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        if (drQuantidade == DialogResult.OK)
                        {
                            return;
                        }
                    }
                    else 
                    {
                        if (isNumeric(textBoxQuantidade.Text.ToString()) == false)
                        {
                            DialogResult drQuantidade = MessageBox.Show("Por favor, coloque apenas dígitos no campo 'Quantidade'!", "Gestor de Stocks v1.0", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            if (drQuantidade == DialogResult.OK)
                            {
                                return;
                            }
                        }
                    }
                    if (comboBoxDia.Text == "dd" || ((comboBoxDia.Text != "1") && (comboBoxDia.Text != "2") && (comboBoxDia.Text != "3") && (comboBoxDia.Text != "4") &&
                            (comboBoxDia.Text != "5") && (comboBoxDia.Text != "6") && (comboBoxDia.Text != "7") && (comboBoxDia.Text != "8") && (comboBoxDia.Text != "9") &&
                            (comboBoxDia.Text != "10") && (comboBoxDia.Text != "11") && (comboBoxDia.Text != "12") && (comboBoxDia.Text != "13") && (comboBoxDia.Text != "14") &&
                            (comboBoxDia.Text != "15") && (comboBoxDia.Text != "16") && (comboBoxDia.Text != "17") && (comboBoxDia.Text != "18") && (comboBoxDia.Text != "19") &&
                            (comboBoxDia.Text != "20") && (comboBoxDia.Text != "21") && (comboBoxDia.Text != "22") && (comboBoxDia.Text != "23") && (comboBoxDia.Text != "24") &&
                            (comboBoxDia.Text != "25") && (comboBoxDia.Text != "26") && (comboBoxDia.Text != "27") && (comboBoxDia.Text != "28") && (comboBoxDia.Text != "29") &&
                            (comboBoxDia.Text != "30") && (comboBoxDia.Text != "31")))
                        {
                            DialogResult drDia = MessageBox.Show("Por favor, preencha o campo 'Dia' da Validade!", "Gestor de Stocks v1.0", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            if (drDia == DialogResult.OK)
                            {
                                return;
                            }
                        }
                        else
                            if (comboBoxMes.Text == "mm" || ((comboBoxMes.Text != "1") && (comboBoxMes.Text != "2") && (comboBoxMes.Text != "3") && (comboBoxMes.Text != "4") &&
                                (comboBoxMes.Text != "5") && (comboBoxMes.Text != "6") && (comboBoxMes.Text != "7") && (comboBoxMes.Text != "8") && (comboBoxMes.Text != "9") &&
                                (comboBoxMes.Text != "10") && (comboBoxMes.Text != "11") && (comboBoxMes.Text != "12"))) 
                            {
                                DialogResult drMes = MessageBox.Show("Por favor, preencha o campo 'Mês' da Validade!", "Gestor de Stocks v1.0", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                if (drMes == DialogResult.OK)
                                {
                                    return;
                                }
                            }
                            else
                                if (comboBoxAno.Text == "aaaa" || ((comboBoxAno.Text != "2008") && (comboBoxAno.Text != "2009") && (comboBoxAno.Text != "2010") && (comboBoxAno.Text != "2011") &&
                                    (comboBoxAno.Text != "2012") && (comboBoxAno.Text != "2013") && (comboBoxAno.Text != "2014") && (comboBoxAno.Text != "2015") && (comboBoxAno.Text != "2016") &&
                                    (comboBoxAno.Text != "2017") && (comboBoxAno.Text != "2018") && (comboBoxAno.Text != "2019") && (comboBoxAno.Text != "2020")))
                                {
                                    DialogResult drAno = MessageBox.Show("Por favor, preencha o campo 'Ano' da Validade!", "Gestor de Stocks v1.0", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                    if (drAno == DialogResult.OK)
                                    {
                                        return;
                                    }
                                }
                                else
                                {
                                                        
                                                string dataValidade = comboBoxDia.Text.ToString() + "-" + comboBoxMes.Text.ToString() + "-" + comboBoxAno.Text.ToString();
                                                DateTime dataValidadeDateTime = Convert.ToDateTime(dataValidade);

                                                try
                                                {
                                                    DBWrapper c = new DBWrapper(EasyDb.DatabaseType.Access);
                                                    c.DBUser = "Admin";
                                                    c.Connect(@"GestorStocks.mdb; Jet OLEDB:Database Password=;");
                                                    //c.dbExecQuery("insert into TabelaSocios(numero_socio,nome,morada,codigo_postal,telefone,data_registo) values ('" + textBoxNumSocioNovoSocio.Text.ToString() + "','" + textBoxNomeNovoSocio.Text.ToString() + "','" + textBoxMoradaNovoSocio.Text.ToString() + "','" + textBoxCodigoPostalNovoSocio.Text.ToString() + "','" + textBoxTelefoneNovoSocio.Text.ToString() + "','" + LblDataRegistoInsereNovoSocio.Text.ToString() + "')");
                                                    c.dbExecQuery("insert into TabelaStocks(produto, quantidade, validade) values ('" + textBoxNome.Text.ToString() + "','" + textBoxQuantidade.Text.ToString() + "','" + dataValidadeDateTime + "');");
                                                    c.Close();
                                                    DialogResult drAdicionarProduto = MessageBox.Show("Produto inserido com sucesso.\nPretende inserir mais produtos?", "Gestor de Stocks v1.0", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                                                    if (drAdicionarProduto == DialogResult.Yes)
                                                    {
                                                        textBoxNome.Text = null;
                                                        textBoxQuantidade.Text = null;
                                                        comboBoxDia.Text = "dd";
                                                        comboBoxMes.Text = "mm";
                                                        comboBoxAno.Text = "aaaa";
                                                        [b]//FAZER AQUI O RELOAD DA DATAGRID DO MAINFORM[/b]
                                                        return;
                                                    }
                                                    else
                                                    {
                                                        textBoxNome.Text = null;
                                                        textBoxQuantidade.Text = null;
                                                        comboBoxDia.Text = "dd";
                                                        comboBoxMes.Text = "mm";
                                                        comboBoxAno.Text = "aaaa";
                                                        [b]//FAZER AQUI O RELOAD DA DATAGRID DO MAINFORM[/b]
                                                        this.Close();
                                                        return;
                                                    }

                                                }
                                                catch (Exception i)
                                                {
                                                    MessageBox.Show("ERRO:\n" + i, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                                    return;
                                                }
                                            }
                                }
                  }
    }

Código do MainForm:

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

namespace GestorDeStocks
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        AdicionarProduto AdicionarProduto = new AdicionarProduto();
        FormCreditos FormCreditos = new FormCreditos();
        RemoverProduto RemoverProduto = new RemoverProduto();

        public void reload_TabelaMainForm()
        {
            TabelaMainForm.Rows.Clear();

            try
            {
                DBWrapper c = new DBWrapper(EasyDb.DatabaseType.Access);
                c.DBUser = "Admin";
                c.Connect(@"GestorStocks.mdb; Jet OLEDB:Database Password=;");
                DBResult dbr = c.dbExecQuery("select * from TabelaStocks order by codigo;");
                DBRow _row = null;
                while ((_row = dbr.FetchAsArray()) != null)
                {
                    string codigo = _row["codigo"];
                    string produto = _row["produto"];
                    string quantidade = _row["quantidade"];
                    string validade = _row["validade"];
                    validade = validade.Substring(0, 10);

                    TabelaMainForm.Rows.Add(codigo, produto, quantidade, validade);
                }
                c.Close();

                if (TabelaMainForm.CurrentRow == null)
                {
                    //MessageBox.Show("Não existem produtos registados!", "Gestor de Stocks", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    LblAvisosEscritos.Text = "Não existem produtos registados!";
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Não foi possível aceder à base de dados. Tente novamente!", "Gestor de Stocks v1.0", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        
        
        private void adicionarToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AdicionarProduto.ShowDialog();
        }

        private void sairToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DialogResult dr = MessageBox.Show("Pretende sair?", "Gestor de Stocks v1.0", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
            if (dr == DialogResult.Yes)
            {
                Application.ExitThread();
            }
        }

        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult dr = MessageBox.Show("Pretende sair?", "Gestor de Stocks v1.0", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
            if (dr == DialogResult.Yes)
            {
                Application.ExitThread();
            }
            else
                if (dr == DialogResult.No)
                {
                    e.Cancel = true;
                }
        }

        private void manualToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                System.Diagnostics.Process.Start("ManualUtilizador.pdf");
            }
            catch (Exception)
            {
                MessageBox.Show("Este ficheiro não existe. Por favor, reinstale a aplicação.", "Gestor de Stocks v1.0", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

        }

        private void acercaDeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FormCreditos.ShowDialog();
        }

        private void removerToolStripMenuItem_Click(object sender, EventArgs e)
        {
            RemoverProduto.ShowDialog();
        }

        private void MainForm_Load(object sender, EventArgs e)
        {
            reload_TabelaMainForm();
        }
    }
}

Espero que assim consigam perceber melhor.

Obrigado desde já.

Link to comment
Share on other sites

Bem a maneira mais trabalhosa seria

// Acrescentar na classe AdicionarProduto

        pprivate MainForm _parentForm;
        
        public MainForm ParentForm
        {
            get
            {
                return _parentForm;
            }

            set
            {
                _parentForm = value;
            }
        }
        
//Substibutir os comentarios //FAZER AQUI O RELOAD DA DATAGRID DO MAINFORM por

ParentForm.TabelaMainForm.Rows.Add(<variavel com o codigo>, <variavel com o produto>, <variavel com a quantidade>, < variavel com a validade>);

// No Main form

private void adicionarToolStripMenuItem_Click(object sender, EventArgs e)
{
  AdicionarProduto.ShowDialog();
  AdicionarProduto.ParentForm = this;
}

// Colocar a TabelaMainForm como public       

Mas existe uma maneira mais facil. 🙂 É usar os Datasets e estes ligados a Database. So tens que passar os dataset para o form de adicioanr produtos.

E no final enviar os novos registos do dataset para a base de dades.

Vanteagens em relação ao codigo que tens agora são muitas. Não necessitas de estar sempre a aceder a base de dados para escrever os dados sempre que é inserido uma linha. Tens un ganho de performance.

"There are two kinds of programmers. Those who write something to get the work done and those who want to write good code."João BrandãoWebsite e blog: http://jamab.blogspot.com/

Link to comment
Share on other sites

Boa tarde SKM, obrigado pela ajuda.

Na primeira opção que me dás, a aplicação, depois de carregar no OK após inserir o produto, ele devolve-me o seguinte erro:

System.NullReferenceException: Object Reference not set to an instance of an object :s na linha "ParentForm.TabelaMainForm.Rows.Add(<variavel com o codigo>, <variavel com o produto>, <variavel com a quantidade>, < variavel com a validade>);"

Sabes do que poderá ser? Eu substituí os campos por strings para ver se era alguma coisa a vet com o "textBoxNome.Text.ToString()" etc...

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.