La liaison de données de DataGridView et une Liste<> avec BindingSource
Je suis à essayer de comprendre comment la liaison de données avec BindingSource
est censé fonctionner
Je veux un DataGridView
à être rempli avec le contenu d'un List<>
lors de la mise à jour de la liste.
Je peux voir la List
croître et de vérifier qu'il est rempli lorsque je vérifie le débogueur. Je pensais que le BindingSource
serait le feu à un événement lors de la List
est changé. Mais aucun de disponible est déclenché. Comment puis-je être averti lorsque la liste sous-jacente est changé?
J'ai suivi les instructions et les suivants du code de test:
Data d;
BindingSource bs;
public Form1()
{
InitializeComponent();
bs = new BindingSource();
d = new Data();
}
private void Form1_Load(object sender, EventArgs e)
{
bs.DataSourceChanged += new EventHandler(bs_DataSourceChanged);
bs.ListChanged += new ListChangedEventHandler(bs_ListChanged);
bs.DataMemberChanged += new EventHandler(bs_DataMemberChanged);
bs.CurrentChanged += new EventHandler(bs_CurrentChanged);
bs.CurrentItemChanged += new EventHandler(bs_CurrentItemChanged);
bs.DataSource = d.list;
dataGridView1.DataSource = bs;
}
//... all the handling methods caught with a break point in VS.
private void button1_Click(object sender, EventArgs e)
{
d.addOneItem();
}
ajout de l'exemple par la demande
OriginalL'auteur rdoubleui | 2009-12-04
Vous devez vous connecter pour publier un commentaire.
List<T>
ne prend pas en charge les événements;BindingList<T>
serait un bon substitut à l'appui de ce scénario, et il prend également en charge au niveau de l'élément événements de changement si votre typeT
implémenteINotifyPropertyChanged
.En 3.0 et au-dessus, il est également
ObservableCollection<T>
, qui agit de manière similaire àBindingList<T>
. Il s'agit d'interfaces telles queIBindingList
,IBindingListView
, etc.De commentaires; pour un 2.0/3.0 exemple d'ajout d'un
Find
àBindingList<T>
:Noter que dans 3,5 (ou dans .NET 2.0/3.0 avec LINQBridge et C# 3.0), vous n'avez pas besoin de cela - tout de l'extension LINQ méthodes ferait la même chose.
Vous pouvez utiliser LINQ, qui fonctionne très bien. Ou sous-classe
BindingList<T>
et ajouter un peu de manque de méthodes (très facile à faire - laissez-moi savoir si vous voulez voir comment faire cela avec un prédicat).J'aimerais savoir comment résoudre que grâce à un prédicat.
OriginalL'auteur Marc Gravell
Si vous souhaitez être averti lorsqu'une propriété est modifiée, vous aurez besoin de mettre en œuvre
INotifyPropertyChanged
Voir ici pour un exemple.
OriginalL'auteur Mez