Implementazioni generiche di IBindingListView
-
09-06-2019 - |
Domanda
Qualcuno può suggerire una buona implementazione di una classe di raccolta generica che implementa il file IBindingListView
& IBindingList
interfacce e fornisce funzionalità di filtraggio e ricerca?
Vedo le mie opzioni attuali come:
- Utilizzando una classe che qualcun altro ha scritto e testato
- Ereditando da
BindingList<T>
, e implementando ilIBindingListView
interfacce - Scrivi una collezione personalizzata da zero, implementandola
IBindingListView
EIBindingList
.
Ovviamente la prima opzione è la mia scelta preferita.
Soluzione
Ho utilizzato e sviluppato un'implementazione che ho trovato in un vecchio post del forum MSDN di alcuni anni fa, ma recentemente ho cercato di nuovo in giro e ho trovato un progetto sourceforge chiamato BindingListView.Sembra piuttosto carino, semplicemente non l'ho ancora inserito per sostituire la mia versione compromessa.
pacchetto nuget: Equin.ApplicationFramework.BindingListView
Codice di esempio:
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");
Altri suggerimenti
Ecco l'aiuto per il tuo metodo 2 e 3 dietro le quinte:Implementazione del filtro per l'associazione dati di Windows Form
Un paio di soluzioni che mi vengono in mente:
IL Progetto Subsonico ha un'implementazione piuttosto carina di
BindlingList<T>
che è open source.Sebbene ciò potrebbe richiedere l'utilizzo dell'intero binario SubSonic per utilizzare la loro implementazione.Mi piace usare le lezioni di Collezioni di potere progetto.È abbastanza semplice ereditare da una delle raccolte di base presenti e implementarla
IBindingListView
.