Durch das Aktualisieren von BindingSource in WinForms wird die Datenquellensammlung nicht aktualisiert
Ich möchte eine benutzerdefinierte Sammlung in a anzeigenDataGridView
in einer Windows Forms-App. Diese benutzerdefinierte Sammlung wird implementiertICollection
, undIEnumerable
. Ich habe einen eingerichtetBindingSource
Verwenden der Auflistung als .DataSource-Eigenschaft. DasDataGridView
soll meine verwendenBindingSource
wie es ist DataSource. Wenn ich der Sammlung einen neuen Gegenstand hinzufüge, benutze ich dieBindingSource.Add()
Methode, dieDataGridView
wird mit dem neuen Element korrekt aktualisiert. DasBindingSource
DataSource hingegen bietet Folgendes nicht:
MyCustomCollection myCollection = new MyCustomCollection();
myCollection.Add(myCustomObject1);
myCollection.Add(myCustomObject2);
myBindingSource.DataSource(myCollection);
myBindingSource.Add(myCustomObject3);
Im obigen Code enthält die interne Liste von myBindingSource die richtige Anzahl von Datensätzen (3) und dieDataGridView
enthält auch drei Datensätze, aber myCollection enthält nur zwei Datensätze. Ich weiß, dass das Ändern der zugrunde liegenden myCollection das NICHT aktualisiertBindingSource
oder derDataGridView
, da es sich nicht um eineBindingList<T>
, aber ich hatte den Eindruck, dass ein UpdateBindingSource
würde direkt sicherstellen, dass myCollection zur gleichen Zeit aktualisiert wurde.
Gibt es eine Möglichkeit, eine Sammlung zu verwenden, die keine ist?BindingList<T>
und aktualisieren Sie es bei der Interaktion mit derBindingSource
direkt?
Aktualisieren: Eine Möglichkeit, die Daten über alle Teile (Sammlung, BindingSource, DataGridView) hinweg zu aktualisieren, ist die folgende:
myCollection.Add(myCustomObject3);
myBindingSource.DataSource = null;
myBindingSource.DataSource = myCollection;
Ich bin mir ziemlich sicher, dass es einen besseren Weg gibt, um dieses Problem anzugehen, aber dies ist die einzige Methode, die die erwarteten Ergebnisse erzielt.