如何在C#中将DataPropertyName设置为Inherited对象的属性?

时间:2014-03-06 12:47:43

标签: c# winforms inheritance datagridview windows-forms-designer

我有一个DataGridView和一个BindingList以及BindingSource来填充它。 我用来填充DataGridView的对象是这样的:

public class MyBaseClass
{
     public int SomeProperty {get; set;}

     public MyBaseClass(int sp) {
         SomeProperty = sp;
     }
}

public class MyDerivedClass : MyBaseClass
{
     public int AnotherProperty {get; set;}

     public MyDerivedClass(int sp, int ap):base(sp)
     {
         AnotherProperty = ap;
     }
}

我的DataGridView可以包含两个对象的列表,但我不知道如何为继承的类中的DataPropertyName设置DataGrid列的AnotherProperty。 这可能吗?

2 个答案:

答案 0 :(得分:0)

这是可能的。请参阅此答案:https://stackoverflow.com/a/22078353/2878550
它指的是字段,但您可以通过在MyCustomTypeDescriptor.GetProperties方法中实现不同的逻辑来适应您的情况。

答案 1 :(得分:0)

那么您的DataSourceMyBaseClass个对象的集合吗?对于没有该属性的MyBaseClass对象,它会做什么?

一个选项是在基类上创建属性virtual并在必要时覆盖它:

public class MyBaseClass
{
     public int SomeProperty {get; set;}
     public virtual int AnotherProperty {get; set;}

     public MyBaseClass(int sp) {
         SomeProperty = sp;
     }
}

public class MyDerivedClass : MyBaseClass
{
     public MyDerivedClass(int sp, int ap):base(sp)
     {
         AnotherProperty = ap;
     }
}