2009-09-16 5 views
1

J'ai un DataGridView que je suis RELIURE comme ceci:DataGridView ne se met pas à jour lorsque des éléments liés sont modifiés?

companies = new BindingList<Company>(PersistenceManager.Instance.RetrieveAll<Company>(SessionAction.BeginAndEnd)); 
bindingSource.DataSource = companies; 
potentialInvestorDataGridView.DataBindings.Add("DataSource", bindingSource, "PotentialInvestors"); 

Le problème est quand j'ajouter à la liste des PotentialInvestors

Company company = bindingSource.Current as Company; 
company.PotentialInvestors.Add (new Investor ()); 

Le DataGrid ne soit pas mis à jour avec une nouvelle ligne. J'ai essayé d'appeler

bindingSource.ResetCurrentItem(); 
potentialInvestorDataGridView.EndEdit(); 
potentialInvestorDataGridView.Refresh(); 

Mais rien ne semble mettre à jour la grille de données. (Si je ferme la boîte de dialogue et la rouvre, les éléments sont maintenant affichés).

Que dois-je faire pour que cela soit correctement mis à jour?

Répondre

1

Les modifications ne seront propagées que si la source de données sous-jacente (le résultat de PersistenceManager.Instance.RetrieveAll<Company>(...)) prend en charge le mécanisme de notification. Je suis assez sûr que pour que cela fonctionne, IBindingList doit être pris en charge sur la source de données elle-même. Avez-vous une liste des interfaces que la source de données implémente?

Modifier

Vous pouvez appeler manuellement une valeur Reset sur l'événement ListChanged (qui est ce que la grille guette) en appelant ResetBindings sur le gridview. Ceci, cependant, entraînera la mise à jour de la grille tous les des données, pas seulement ce qui a changé.

+0

Mes deux classes Société et Investisseur prennent en charge l'interface INotifyPropertyChanged et devraient donc notifier les mises à jour des propriétés. De toute façon, je devrais être capable de dire à la grille de données pour mettre à jour d'une manière ou d'une autre cependant? – Kyle

Questions connexes