Jump to content

Form Refresh


D3POD
 Share

Recommended Posts

Boas, precisava da vossa ajuda para fazer o refresh a um form.

No programa que estou a criar tenho um form que tem 1 combobox. Neste mesmo form existe um botão que ao ser clicado abre um form2 e neste existe uma textbox e um botao, que serve para adicionar o valor da textbox a uma base de dados.

O que preciso é de atualizar o primeiro form para que este vá buscar o novo valor à base de dados.

Está tudo a funcionar, mas obriga-me a fechar o programa e re-abrir para que esse novo valor apareça na combobox.

Agradeço toda a ajuda 🙂

Cumprimentos,

D3POD

Link to comment
Share on other sites

Podes criar uma função protected no form1 que faz this.refresh(); e depois de carregares no botão para adicionar os dados à base de dados ele chama essa função.

Fica do género.

Form1

protected static void reiniciar(){
this.refresh();
}

Form2

private void button1_click(object sender, EventArgs e)
{
(...)

Form1.reiniciar();
}

Se o protected não funcionar pões public

O que também podes fazer é em vez de fazeres o refresh voltas a preencher a combobox

Edited by hugorodrigues

Because being normal isn't funny

Link to comment
Share on other sites

Boas,

tens várias formas de o fazer.

Uma delas será teres no form 1 uma função publica que será usada para atualizar os dados e ao chamar o form 2, guardas o form atual com owner

private void button1_Click(object sender, EventArgs e)
{
   Form2 frm = new Form2();
   frm.Owner = this;
   frm.Show();
}
//
public void AtualizaDados()
{ 

}

No segundo form, usas o owner para aceder ao form pai

private void button1_Click(object sender, EventArgs e)
{
   // Chama a função do form pai (que é do tipo form1) para atualizar os dados
   ((Form1)this.Owner).AtualizaDados();
   // Fecha o form atual
   this.Close();
}
Edited by nelsonr
  • Vote 1
Link to comment
Share on other sites

Boas nelsonr, nessa função AtualizaDados coloco o quê?

Eu neste momento criei um datagridview que apresenta os dados que gravo no segundo form. Mas lá está, quando fecho o segundo form depois de gravar os dados na base de dados, o datagridview do 1º form não apresenta o novo dado inserido. É este refresh que quero fazer, pois o utilizador vai ter que utilizar logo esses dados acabados de inserir.

Link to comment
Share on other sites

Estou a utilizar o seguinte código para carregar o valor no datagridview:

string server = "Server = DIOGOPORTATIL; Database = GRI; Trusted_Connection = True";
	    string query = "SELECT * FROM clients";
	    SqlConnection con = new SqlConnection(server);
	    SqlDataAdapter data = new SqlDataAdapter(query, con);
	    DataSet ds = new DataSet();
	    con.Open();
	    data.Fill(ds);
	    con.Close();
	    dgv_clientes.DataSource = ds.Tables[0];

Então vou ter que utilizar um método update?

Link to comment
Share on other sites

Por acaso tinha á isso +/- assim, porque tinha criado uma função para este código e já a tinha a chamar no Load_Form, mas fui ao evento click do botão no form dois e coloquei assim:

Clientes frm = new Clientes();
frm.atualizadados();
this.close();

mas não atualiza na mesma... o form1 está aberto por trás portanto não corre o evento do form_load... tenho mesmo que fazer o atualiza aquando do clicar do botão.

Edit:

Experimentei como me indicaste no primeiro exemplo e também não deu:

((Clientes)this.owner).atualizadados();
this.close();
Edited by D3POD
Link to comment
Share on other sites

Quando queres executar algo noutro form tens de ter uma referencia para esse form.

Nesse exemplo guardaste a referencia no campo owner.

Podias guardar noutro sitio qualquer, desde que tenhas acesso quando precisas.

O que este codigo faz ((Clientes)this.owner).atualizadados(); é aceder ao form guardado na propriedade owner.

Como a propriedade Owner é do tipo Form, não tem conhecimento da função atualizadados (que está definida no form do tipo clientes).

Então como sabes que o owner é um form do tipo clientes fazes o cast. Isso permite aceder ao Owner como se fosse do tipo Clientes. E assim já tens acesso às propriedades publicas

Link to comment
Share on other sites

Boas,

Existe uma outra opção que é o uso de eventos. Isto permite que possas reutilizar a Form2 a partir de qualquer outra Form que não tenha a função atualizar.

Abaixo tens um "exemplo" de como fazer isso.

Código da Form1

public Form1()
 {
	 InitializeComponent();
	 this.i = 0;
 }
 int i;
 private void button1_Click(object sender, EventArgs e)
 {
	 Form2 frm = new Form2();
	 frm.ButtonWasClicked += frm_ButtonWasClicked;
	 frm.ShowDialog();
 }
 void frm_ButtonWasClicked(object sender, EventArgs e)
 {
	 i++;
	 label1.Text = i.ToString();

 }

Código da Form2

public event EventHandler ButtonWasClicked;
 public Form2()
 {
	 InitializeComponent();
 }
 private void button1_Click(object sender, EventArgs e)
 {
	 if(ButtonWasClicked!=null)
	 {
		 ButtonWasClicked(this, EventArgs.Empty);
	 }
 }

é algo muito minimalista mas acho que dá para ver o conceito.

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.