Возможно, есть более простой способ, но я добился успеха с этим.Обратите внимание, что у меня есть пользовательские классы, привязанные к DataGridView с List (Of T), а не BindingSource.Строка columns
представляет собой пару имени свойства объекта и текста заголовка столбца.то есть «Имя» равно Product.Name
, а «№ продукта» - это то, что показано в заголовке столбца DataGridView.
dgvItemList.AutoGenerateColumns = False
dgvItemList.DataSource = Services.MasterLists.Products.GetList
Dim columns As String() = {"ID", "ID",
"Name", "Product #",
"Description", "Description",
"Family", "Family",
"Comments", "Comments"}
Helpers.Controls.AddColumnsToDataGridView(dgvItemList, columns)
dgvItemList.Columns(0).Visible = False
dgvItemList.Columns(1).Width = 90
dgvItemList.Columns(2).Width = 200
dgvItemList.Columns(3).Width = 100
dgvItemList.Columns(4).Width = 200
И определение Helpers.Controls.AddColumnsToDataGridView:
Public Shared Sub AddColumnsToDataGridView(ByRef dgv As DataGridView, ByVal columns As String())
dgv.Columns.Clear()
For i As Integer = 0 To columns.Length - 1 Step 2
Dim column As DataGridViewColumn = New DataGridViewTextBoxColumn()
' i = index of the object's property name. i + 1 = the column name to show in the grid
column.DataPropertyName = columns(i)
column.Name = columns(i + 1)
dgv.Columns.Add(column)
Next
End Sub
Причина, по которой я это делаю, заключается в том, что я не хочу, чтобы DataGridView отображал все свойства объекта Product
, только те поля, которые я хочу показать.