Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

N3lson

[Resolvido] Refresh Datagrid

Mensagens Recomendadas

N3lson    17
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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson    17
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();
	   }
}

Editado por 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
N3lson    17
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;
	 }

Editado por 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.