0

假设我有这 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 类型的对象,并存储在这个 List 中:
List< ClassParent> _Test;

我想将此列表绑定到 GridView
MyGridView.DataSource=_Test;

这可行,但它只显示网格中的一个字段(ClassParent 类中的 TestParent 属性)。我明白为什么:该列表由“ClassParent”对象组成,因此绑定仅使用该类的属性完成。问题是 ClassChild1 和 ClassChild2 类型的对象继承自 ClassParent。

我的问题是:如果我有一个不同类型的对象列表,但它们都继承自同一个类,我如何将所有属性绑定到网格?

4

2 回答 2

1

属性必须存在于基类中。否则,您将如何在未定义它们的子类中访问它们?(您希望网格显示ClassChild2.TestChild1什么?)

解决此问题以适合您的模型应该工作的一种方法是定义TestChild1TestChild2作为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; }  
}
于 2009-03-30T14:31:38.897 回答
0

您可以手动创建列,而不是从类型推断它们。这样,您可以绑定到您想要的任何属性。

于 2009-03-30T14:31:17.757 回答