Подклассы привязки данных - PullRequest
0 голосов
/ 30 марта 2009

Скажите, у меня есть эти 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 _Test;

Я хочу связать этот список с GridView
MyGridView.DataSource = _test;

Это работает, но показывает только одно поле в сетке (свойство TestParent, которое находится в классе ClassParent). Я понимаю почему: список состоит из объектов ClassParent, поэтому привязка выполняется только со свойствами этого класса. Дело в том, что объекты типа ClassChild1 и ClassChild2 наследуются от ClassParent.

У меня вопрос: если у меня есть список объектов различного типа, но все они наследуются от одного класса, как я могу связать все свойства с сеткой?

Ответы [ 2 ]

1 голос
/ 30 марта 2009

Свойства должны присутствовать в базовом классе. Иначе как бы вы получили к ним доступ в подклассе, где они не определены? (Что бы вы хотели, чтобы сетка показывала для 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; }  
}
0 голосов
/ 30 марта 2009

Вы можете создавать столбцы вручную, а не выводить их из типа. Таким образом, вы можете привязать к любым свойствам, которые вы хотите.

...