Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

N3lson

[Resolvido] Refresh Datagrid

Recommended Posts

N3lson

Boas gostaria de efectuar o seguinte.

Tenho uma form1 GridOrd e ao clicar num botão abre a Form2 na qual visualizo os detalhes do campo, e dentro dessa form2 existe mais botões para editar ou eliminar os dados, acontece que sempre que faço alguma alteração a GridOrd da form1 não actualiza, já tentei com GridOrd.Refresh(), .Update(), .Invalidate() e nada, só reiniciando a aplicação é que os dados se apresentam actualizados.

Podem me ajudar ?

Info, sou iniciante em c#


You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Share this post


Link to post
Share on other sites
N3lson

Form 1

 DataTable dtOrdens = new DataTable();
	DataTable dtPreventivas = new DataTable();
	DataTable dtNotas = new DataTable();
	MySqlDataAdapter adapter;
	MySqlCommand cmd;


	public Principal()
	{
		InitializeComponent();
		UltimasOrdens();  // Onde tem o fil
		PreventivasEfectuar();
		ReturnNotas("1");
		this.Empresa.Text = Controle.Empresa + "  " + Controle.DataActual;

	}

  public void UltimasOrdens()
	{
		string query = funcao.SelectOrdTrabalho + " WHERE estado = 1";

		dtOrdens.Clear();

		adapter = new MySqlDataAdapter(query, con.liga());

		string[] headers = { "","","Num", "Data", "Obs. da Avaria", "Operador","Impreso" };

		string[] campos = { "","","id", "data_ord", "obs_avaria", "descr","printdescr" };

		int i = 0;

		this.GridOrdens.RowHeadersVisible = false;
		this.GridOrdens.ColumnCount = headers.Length;
		this.GridOrdens.AutoGenerateColumns = false;

		adapter.Fill(dtOrdens);

		foreach (string header in headers)
		{
			this.GridOrdens.Columns[i].HeaderText = headers[i];
			this.GridOrdens.Columns[i].DataPropertyName = campos[i];
			i++;
		}
		this.GridOrdens.Columns[2].Width = 41; //ordnum
		this.GridOrdens.Columns[2].Visible = false; //ordnum
		this.GridOrdens.Columns[2].Frozen = true;
		this.GridOrdens.Columns[3].Width = 80; //data
		this.GridOrdens.Columns[3].Frozen = true;
		this.GridOrdens.Columns[4].Width = 320; //actividade

		this.GridOrdens.DataSource = dtOrdens;
	}


	private void DetalhesOrdem_FormClosed(object sender, FormClosedEventArgs e)  // Acção a realizar ao fechar o Form2
	{
		UltimasOrdens();
	}

Form2

  private void btnGuardar_Click(object sender, EventArgs e)
	{
		string obs_avaria   = this.dbObsAvaria.Text.ToUpper();
		string notas_finais = this.dbNotasFinais.Text.ToUpper();
		string id		   = this.inputdbId.Text;

		string query = "UPDATE ord_trabalho SET obs_avaria=@obs_avaria , notas_finais=@notas_finais WHERE id=@id";

		try
		{
			cmd = new MySqlCommand(query, con.liga());

			cmd.Parameters.AddWithValue("@obs_avaria", obs_avaria);
			cmd.Parameters.AddWithValue("@notas_finais", notas_finais);
			cmd.Parameters.AddWithValue("@id", id);

			con.abre();

			int sucesso = cmd.ExecuteNonQuery();

			if (sucesso > 0)
			{
				MessageBox.Show("Dados editados com sucesso!",
								texto.sucesso,
								MessageBoxButtons.OK,
								MessageBoxIcon.Information);
			}
			else
			{
				MessageBox.Show("Ocorreu um erro ao guardar os dados.",
								texto.erro,
								MessageBoxButtons.OK,
								MessageBoxIcon.Error);
			}
		}
		catch (Exception er)
		{
			MessageBox.Show(er.Message,
							texto.ex,
							MessageBoxButtons.OK,
							MessageBoxIcon.Warning);
			throw;
		}
		finally
		{
			con.fecha();
			Principal main = new Principal();
			main.UltimasOrdens();
	   }
}

Edited by N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Share this post


Link to post
Share on other sites
N3lson

Boas já consegui resolver (não sei se será o melhor método) da seguinte forma.

Criei uma variável estática com valor 0, no form2 atribuo o valor 1 depois de completado o editar || eliminar || inserir ( faz o refresh ) e retorna ao valor de defeito

	if (Controle.controlarUpdate == 1)
	{
			this.UltimasOrdens();
			this.PreventivasEfectuar();
			this.ReturnNotas("1");
			Controle.controlarUpdate = 0;
	 }

Edited by N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Share this post


Link to post
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

×

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.