2009-03-30 8 views
0

Sagen, ich habe diese 3 Klassen:Databinding Unterklassen

public class ClassParent 
{ 
public string TestParent { get; set; } 
} 

public class ClassChild1 : ClassParent 
{ 
public string TestChild1 { get; set; } 
} 

public class ClassChild2 : ClassParent 
{ 
public string TestChild2 { get; set; } 
} 

Sprich ich viele Objekte vom Typ ClassChild1 und ClassChild2 erstellt haben, die ich in dieser Liste gespeichert haben:
Liste < Classparent> _test ;

Ich möchte diese Liste an eine GridView binden
MyGridView.DataSource = _Test;

Dies funktioniert, aber es zeigt nur ein Feld im Raster (die TestParent-Eigenschaft, die in der ClassParent-Klasse ist). Ich verstehe, warum: Die Liste besteht aus "ClassParent" -Objekten, so dass die Bindung nur mit den Eigenschaften dieser Klasse erfolgt. Die Sache ist die Objekte vom Typ ClassChild1 und ClassChild2 erben von ClassParent.

Meine Frage ist: Wenn ich eine Liste von Objekten unterschiedlichen Typs habe, die alle von der gleichen Klasse erben, wie kann ich alle Eigenschaften an das Gitter binden?

Antwort

0

Sie können die Spalten manuell erstellen, anstatt sie vom Typ abzuleiten. Auf diese Weise können Sie an beliebige Eigenschaften binden.

1

Die Eigenschaften müssen in der Basisklasse vorhanden sein. Wie würden Sie sonst auf sie in einer Unterklasse zugreifen, wo sie nicht definiert sind? (Was möchten Sie das Raster für ClassChild2.TestChild1 zeigen?)

Ein Weg, um dieses Modell passen, die arbeiten soll, ist TestChild1 und TestChild2 als virtuelle Eigenschaften Ihres ClassParent Objekt zu definieren, dann außer Kraft setzen sie in den Kindern:

public class ClassParent 
{ 
    public string TestParent { get; set; } 
    public virtual string TestChild1 { get {return null;}} 
    public virtual string TestChild2 { get {return null;}} 
} 

public class ClassChild1 : ClassParent 
{ 
    public override string TestChild1 { get; set; } 
} 

public class ClassChild2 : ClassParent 
{ 
    public override string TestChild2 { get; set; } 
}