说我有这3个课程:
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; }
}
说,我已经创建了很多类型为ClassChild1和ClassChild2的对象,我已经存储在这个列表中:
列表与LT; ClassParent> _Test;
我想将此列表绑定到GridView
MyGridView.DataSource = _Test;
这可以工作,但它只显示网格中的一个字段(TestParent属性在ClassParent类中)。我理解为什么:列表由'ClassParent'对象组成,因此只能使用该类的属性进行绑定。问题是ClassChild1和ClassChild2类型的对象继承自ClassParent。
我的问题是:如果我有一个不同类型的对象列表,但它们都从同一个类继承,那么我如何将所有属性绑定到网格?
答案 0 :(得分:1)
属性必须存在于基类中。否则,您将如何在未定义它们的子类中访问它们? (您希望网格显示为ClassChild2.TestChild1
?)
解决这个问题的方法之一是将TestChild1
和TestChild2
定义为ClassParent
对象的虚拟属性,然后在子代中覆盖它们:
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; }
}
答案 1 :(得分:0)
您可以手动创建列,而不是从类型中推断出列。这样,您就可以绑定到您想要的任何属性。