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

Sign in to follow this  
hdricard

Actualizar dados de uma DataGridView com várias Threa

Recommended Posts

hdricard

Bom dia,

Preciso da vossa ajuda, desde já o meu obrigado.

Tenho um projecto em :NET C# 3.5 WindowsForms.

Preciso de mostrar informação de 350 registos numa DataGridView.

Esta informação sofre alterações constantes e eu preciso de as mostrar ao utilizador "na hora". Tenho dois timers, que consomem um WebService, em métodos diferentes e que alteraram a informação que está na Grid, por vezes 5 vezes por segundo.

É informação critica, o software é especificamente para isso e não posso falhar.

Implementei este problema da seguinte forma:

public class Data : INotifyPropertyChanged
{
  private colunaA;
  private colunaB;
  private colunaC;
  public event PropertyChangedEventHandler PropertyChanged;

  public Data() { }

  public ColunaA { get { return this.colunaA; } set { if (this.colunaA != value) { this.colunaA = value; onpropertychanged("ColunaA"); } }
  ...

  private void onpropertychanged(string propertyName)
	{
		if (PropertyChanged != null)
		{
			PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
		}
	}
}

Criei uma BindingList<Data> onde guardo todos os 350 registos que preciso de popular na Grid.

Os dois timers obtem a informação dos métodos do WebService e percorrem a BindingList<Data>, alterando os registos sempre que há alterações.

O objecto Data ao receber alterações vai disparar o onpropertychanged e informar a DataGridView que precisa de ser alterada.

Isto foi uma solução (para mim optima) para refrescar a informação da DataGridView sem ser necessário recorrer ao refresh ou update, ...

O problema é que tenho sérias duvidas de duas coisas:

- será que a informação alterada na DataGridView pelo INotifyPropertyChanged ocorre apenas no registo que foi alterado? Por vezes, ou mtas vezes parece-me que a alteração ocorre em todos os registos.

- a nivel de performance, na vossa opinião, é a solução perfeita? Os timers (do .Net) são a solução ideial para correr de X em X tempo e actualizar a DataGridView?

Estou com bastante dificuldade em perceber se implementei o melhor processo possível para este caso. Gostava de ouvir a vossa opinião e que alternativas sugeria para melhor o processo?

Obrigado mais uma vez pelas possíveis ajudas.

Abraço

Hugo

Edited by apocsantos
geshi

Share this post


Link to post
Share on other sites
apocsantos

Boa tarde,

Relativamente à preformance da aplicação, não tens hipotese de fazer os pedidos com metodos assincronos ? Penso que poderias ganhar desempenho no com essa alternativa.

O INotifyPropertyChanged, não tenho a certeza, mas creio que no caso, não faz o reset mas sim o refresh(), da datagridview sem fazer o reset, mas não tenho a certeza, pois não usso esse metodo com frequência.

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Share this post


Link to post
Share on other sites
hdricard

Obrigado,

Sim, utilizo métodos assíncronos.

Só gostaria de perceber se existem alternativas ou se a forma como implementei é mesmo a mais correcta, ...

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
Sign in to follow this  

×

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.