Generische IBindingListView-Implementierungen
-
09-06-2019 - |
Frage
Kann jemand eine gute Implementierung einer generischen Sammlungsklasse vorschlagen, die das implementiert? IBindingListView
& IBindingList
Schnittstellen und bietet Filter- und Suchfunktionen?
Ich sehe meine aktuellen Optionen wie folgt:
- Verwenden einer Klasse, die jemand anderes geschrieben und getestet hat
- Erben von
BindingList<T>
, und Umsetzung derIBindingListView
Schnittstellen - Schreiben Sie eine benutzerdefinierte Sammlung von Grund auf und implementieren Sie sie
IBindingListView
UndIBindingList
.
Offensichtlich ist die erste Option meine bevorzugte Wahl.
Lösung
Ich habe eine Implementierung verwendet und darauf aufgebaut, die ich vor ein paar Jahren in einem alten MSDN-Forumsbeitrag gefunden habe, aber kürzlich habe ich mich noch einmal umgesehen und ein Sourceforge-Projekt namens gefunden BindingListView.Es sieht ziemlich gut aus, ich habe es nur noch nicht eingespielt, um meine gehackte Version zu ersetzen.
Nuget-Paket: Equin.ApplicationFramework.BindingListView
Beispielcode:
var lst = new List<DemoClass>
{
new DemoClass { Prop1 = "a", Prop2 = "b", Prop3 = "c" },
new DemoClass { Prop1 = "a", Prop2 = "e", Prop3 = "f" },
new DemoClass { Prop1 = "b", Prop2 = "h", Prop3 = "i" },
new DemoClass { Prop1 = "b", Prop2 = "k", Prop3 = "l" }
};
dataGridView1.DataSource = new BindingListView<DemoClass>(lst);
// you can now sort by clicking the column headings
//
// to filter the view...
var view = (BindingListView<DemoClass>)dataGridView1.DataSource;
view.ApplyFilter(dc => dc.Prop1 == "a");
Andere Tipps
Hier ist die Hilfe für Ihre Methode 2 und 3 hinter den Kulissen:Implementieren der Filterung für die Windows Forms-Datenbindung
Ein paar Lösungen, die mir einfallen:
Der SubSonic-Projekt hat eine ziemlich schöne Implementierung von
BindlingList<T>
Das ist Open Source.Allerdings erfordert dies möglicherweise die Verwendung der gesamten SubSonic-Binärdatei, um ihre Implementierung zu verwenden.Ich nutze gerne die Kurse von Power-Sammlungen Projekt.Es ist ziemlich einfach, von einer der dortigen Basissammlungen zu erben und zu implementieren
IBindingListView
.