У меня есть вложенный общий список.Я хочу связать это с datagridview в vb.net.когда я связываю список, вложенный столбец заполняется только заголовком - PullRequest
0 голосов
/ 18 октября 2018

У меня есть класс Item

 Public Class Item
        Public Property ItemID() As Integer
        Public Property ItemName() As String
        Public Property itemCategory() As ItemCategory
 End class      

---------
Another Class of ItemCategory

Public Class ItemCategory
    Public Property ItemCategoryID() As Integer
    Public Property ItemCategoryName() As String
End Class
----------

, когда я получаю данные в классе List (из элемента) из базы данных, он возвращает эти столбцы.

  1. itemID
  2. itemName
  3. itemCategory

    3 (a) itemCategoryID 3 (b) itemCategoryName

, когда я связываю этот список с Datagridview,это показывает только три столбца и заполнение третьего столбца с именем столбца «ItemCategory».Мне нужно показать itemCategoryID и itemCategoryName в datagridview.

1 Ответ

0 голосов
/ 18 октября 2018

Как указал @jmcilhinney, в нем нет магии, и datagridview нужно знать, как должно отображаться ItemCategory.

Один из вариантов - создать класс "viewmodel", который предоставит свойства для DataGridView.

Классы, заполненные из базы данных:
(Вам не нужно повторять имя класса в каждом свойстве иСвойства будут легко читаться без префиксов имени класса)

Public Class Item
    Public Property ID As Integer
    Public Property Name As String
    Public Property Category As ItemCategory
End class      

Public Class ItemCategory
    Public Property ID As Integer
    Public Property Name As String
End Class

Затем создайте класс viewmodel, который будет представлять все свойства, необходимые для DatagridView

Public Class ItemViewModel
    Private ReadOnly _item As Item

    Public Property Id As String
        Get
            Return _item.ID
        End Get
    End Property

    ' Add setter if you want edit values through DataGridView
    Public Property Name As String
        Get
            Return _item.Name
        End Get
    End Property

    Public Property CategoryId As String
        Get
            Return _item.Category.ID
        End Get
    End Property

    Public Property CategoryName As String
        Get
            Return _item.Category.Name
        End Get
    End Property

    Public Sub New(item As Item)
        _item = item
    End Sub
End class      

Затем вы можете связать viewmodel с DataGridView

Dim items As List(Of Item) = LoadFromDatabase()

Dim viewmodels = items.Select(Function(item) new ItemViewModel(item)).ToList()

myDataGridView.DataSource = viewmodels
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...