die folgende Struktur betrachtenGenerisches Sammlung Polymorphismus Typ als Parameter
class A {}
class B : A {}
class C : A {}
class D : A {}
...
// in data source class
BindingList<B> d1;
BindingList<C> d2;
BindingList<D> d3;
...
// in datagridview class
void BindDataSource(BindingList<A> source);
void QueryDataSource() {
BindingList<A> source = (BindingList<A>)dgv.DataSource;
A a = source.First(...);
}
Ich möchte d1
und d2
binden ... zu einem DataGridView
durch BindDataSource
sot dass jede Änderung d1
und d2
automatisch in widerspiegeln DataGridView
. Von this post habe ich erfahren, dass der obige Code nicht gültig ist. Aber keine der Lösungen in diesem Post trifft auf meine Situation zu. Ich habe versucht, BindDataSource
die folgenden
void BindingDataSource<T>(BindingList<T> source) where T:A;
zu ändern, aber jetzt QueryDataSource
nicht kompilieren, da ich nicht die Datasource werfen kann. Gibt es eine Möglichkeit, das Ganze zu lösen?
wenn Sie nur Abfragen LINQ verwenden, pro Ihrem Beispiel, warum dann nicht werfen Sie Ihre 'DataSource' zu' IEnumerable '(verknüpften Frage legt dies nahe). 'IEnumerable' ist Co-Variante, alle 3 Ihrer Listen sind 'IEnumerable ' .. –