#.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
, что решило проблему.