rjcp Posted May 21, 2008 at 03:44 PM Report Share #186472 Posted May 21, 2008 at 03:44 PM 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 More sharing options...
Tiago Salgado Posted May 22, 2008 at 07:12 PM Report Share #186769 Posted May 22, 2008 at 07:12 PM Uma hipotese é teres uma função no formulário que contem a grid... e poes lá o código para fazer o refresh. Depois do outro formulário fazes algo do tipo form1.FuncaoRefresh(). Link to comment Share on other sites More sharing options...
rjcp Posted May 22, 2008 at 08:26 PM Author Report Share #186790 Posted May 22, 2008 at 08:26 PM Isso já eu fiz... mas não resulta :S Link to comment Share on other sites More sharing options...
Tiago Salgado Posted May 22, 2008 at 09:00 PM Report Share #186794 Posted May 22, 2008 at 09:00 PM Mas entao será mais facil mostrares o que tens feito ... pra te podermos ajudar!! Link to comment Share on other sites More sharing options...
DanielAmorim Posted May 22, 2008 at 11:22 PM Report Share #186835 Posted May 22, 2008 at 11:22 PM O Form2 é lançado pelo Form1? Se não for acho que podes ter o problemas do confinamento a Thread que é dado para a UI em Windows Forms. Tenta explicar melhor que que fizeste e porque não resultou 😛 Daniel Amorim VP for xRTML http://www.xrtml.org http://www.realtime.co Link to comment Share on other sites More sharing options...
rjcp Posted May 23, 2008 at 12:01 AM Author Report Share #186837 Posted May 23, 2008 at 12:01 AM 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 More sharing options...
Tiago Salgado Posted May 23, 2008 at 08:09 AM Report Share #186858 Posted May 23, 2008 at 08:09 AM Pela 2ª vez... poe o código que tens e que não te está a funcionar para te podermos ajudar!!! Link to comment Share on other sites More sharing options...
skm Posted May 23, 2008 at 09:30 AM Report Share #186872 Posted May 23, 2008 at 09:30 AM 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 More sharing options...
rjcp Posted May 23, 2008 at 01:01 PM Author Report Share #186888 Posted May 23, 2008 at 01:01 PM 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 More sharing options...
skm Posted May 23, 2008 at 02:01 PM Report Share #186904 Posted May 23, 2008 at 02:01 PM 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 More sharing options...
rjcp Posted May 23, 2008 at 06:05 PM Author Report Share #186944 Posted May 23, 2008 at 06:05 PM 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 More sharing options...
skm Posted May 26, 2008 at 08:59 AM Report Share #187509 Posted May 26, 2008 at 08:59 AM So fazendo um debug. Não testei o codigo que enviei. Exprimenta fazer um debug. "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 More sharing options...
rjcp Posted May 27, 2008 at 06:36 PM Author Report Share #187888 Posted May 27, 2008 at 06:36 PM Já fiz o debug mas o gajo não se acusa em lado nenhum. Apenas dá aquele erro que mostrei acima... Link to comment Share on other sites More sharing options...
skm Posted May 28, 2008 at 08:44 AM Report Share #187974 Posted May 28, 2008 at 08:44 AM Estas a usar um objecto que não esta inicializado. ou que tem o valor a null. "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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now