(VB.Net ) Свойства базового класса не отображаются в DataGridView при привязке данных

#.net #vb.net #data-binding #datagridview

#.net #vb.net #привязка данных #datagridview

Вопрос:

Я пытаюсь привязать DataGridView к списку объектов DerivedClass. Проблема в том, что когда я делаю это через DataGridView.DataSource = New BindingList(Of DerivedClass)(myList) , в DataGridView отображаются только свойства DerivedClass ( Graf ) . Мне нужно, чтобы были показаны все свойства ( Name , Details , Day ). Есть ли простое решение для этого? Большое вам спасибо за ваш вклад.

Базовый класс:

 Public MustInherit Class BaseClass
    Public Property Name As String
    Public Property Details As String
    Public Property Day As DateTime
End Class
 

Производный класс:

 Public Class DerivedClass
    Inherits BaseClass
    Public Property Graf As Graf
End Class
 

Основной метод:

 Module MainModule
    Public myList As List(Of DerivedClass) = ...
    Sub Main()
        DataGridView1.DataSource = New BindingList(Of DerivedClass)(myList)
    End Sub
End Module
 

Редактировать:
На самом деле приведенный выше код значительно упрощен. Здесь я предоставляю дополнительные сведения о реализации, поскольку это, по-видимому, является источником проблемы.

Интерфейс 1

 Public Interface IBaseInterface
    Property Name As String
    Property Detials As String
    Property Day As DateTime
End Interface
 

Интерфейс 2

 Public Interface ISample
    Inherits IBaseInterface
    Property Graf As Graf
End Interface
 

Абстрактный класс, реализующий IBaseInterface

   Public MustInherit Class BaseClass
        Implements IBaseInterface
        Public Property Name As String Implements IBaseInterface.Name
        Public Property Details As String Implements IBaseInterface.Detials
        Public Property Day As DateTime Implements IBaseInterface.Day
    End Class
 

Конкретный класс, реализующий ISample и наследующий от BaseClass

 Public Class Sample
        Inherits BaseClass
        Implements ISample
        Public Property Graf As Graf Implements ISample.Graf
    End Class
 

Основной метод

 Module MainModule
    Public myList As List(Of ISample)
    Sub Main()
        DataGridView1.DataSource = New BindingList(myList)
    End Sub
End Module
 

Комментарии:

1. Вы пробовали другой способ New BindingList(Of BaseClass)(myList) ?

2. @AlexB. У меня есть. Он выдает исключение InvalidCastException.

3. Та же проблема возникла, когда я попытался выполнить итерацию по свойствам DerivedClass с помощью отражения. Был получен только Graf.

4. Что означает, что в DataGridView отображаются только свойства производного класса? Что вы видите только Graf свойство? Это невозможно.

5. @Jimi Точно. Существует только один столбец «Graf».

Ответ №1:

Как предложил Джими в комментариях, я изменил тип списка с ISample на Sample , что решило проблему.