Winforms 在绑定到集合的datagridview中设置组合框

Winforms 在绑定到集合的datagridview中设置组合框,winforms,collections,datagridview,combobox,Winforms,Collections,Datagridview,Combobox,我有一个问题,希望有人能帮我。我的问题涉及VisualStudio2008中的winforms和datagridview。我想将datagridview绑定到业务对象的集合,而不是数据集。我希望datagridview中的组合框可以从业务对象中的一个属性获取其值。这可能吗?有人可以提供示例代码或提供一个网页来描述如何做到这一点。任何帮助都将不胜感激 谢谢, Greg这里是一个简单的数据类: Public Class MyData Private _ID As Integer Priva

我有一个问题,希望有人能帮我。我的问题涉及VisualStudio2008中的winforms和datagridview。我想将datagridview绑定到业务对象的集合,而不是数据集。我希望datagridview中的组合框可以从业务对象中的一个属性获取其值。这可能吗?有人可以提供示例代码或提供一个网页来描述如何做到这一点。任何帮助都将不胜感激

谢谢,
Greg

这里是一个简单的数据类:

Public Class MyData

  Private _ID As Integer
  Private _ItemValue As String

  Public Sub New(ByVal id As Integer, ByVal itemValue As String)
    _ID = id
    _ItemValue = itemValue
  End Sub

  ReadOnly Property ID() As Integer
    Get
      Return _ID
    End Get
  End Property

  Public Property ItemValue() As String
    Get
      Return _ItemValue
    End Get
    Set(ByVal value As String)
      _ItemValue = value
    End Set
  End Property

End Class
创建表单并在其上放置DataGridView控件,添加以下代码:

Private myList As New List(Of String)
Private myItems As New List(Of MyData)

Protected Overrides Sub OnLoad(ByVal e As EventArgs)
  MyBase.OnLoad(e)

  myList.Add("First Item")
  myList.Add("Last Item")

  myItems.Add(New MyData(1, "Last Item"))
  myItems.Add(New MyData(2, "First Item"))

  DataGridView1.AutoGenerateColumns = False
  DataGridView1.Columns.Add(New DataGridViewTextBoxColumn() With _
                           {.HeaderText = "ID", _
                            .DataPropertyName = "ID"})
  DataGridView1.Columns.Add(New DataGridViewComboBoxColumn() With _
                           {.HeaderText = "ItemValue", _
                            .DataSource = myList, _
                            .DataPropertyName = "ItemValue"})

  DataGridView1.DataSource = myItems
End Sub

由于您希望在网格中使用组合框,因此必须将
AutoGenerateColumns
设置为false,并自己创建组合框,通过
DataPropertyName
属性将每个列映射到类中的属性。对于组合框,您可以为下拉项列表设置自己的
数据源。

下面是一个简单的数据类:

Public Class MyData

  Private _ID As Integer
  Private _ItemValue As String

  Public Sub New(ByVal id As Integer, ByVal itemValue As String)
    _ID = id
    _ItemValue = itemValue
  End Sub

  ReadOnly Property ID() As Integer
    Get
      Return _ID
    End Get
  End Property

  Public Property ItemValue() As String
    Get
      Return _ItemValue
    End Get
    Set(ByVal value As String)
      _ItemValue = value
    End Set
  End Property

End Class
创建表单并在其上放置DataGridView控件,添加以下代码:

Private myList As New List(Of String)
Private myItems As New List(Of MyData)

Protected Overrides Sub OnLoad(ByVal e As EventArgs)
  MyBase.OnLoad(e)

  myList.Add("First Item")
  myList.Add("Last Item")

  myItems.Add(New MyData(1, "Last Item"))
  myItems.Add(New MyData(2, "First Item"))

  DataGridView1.AutoGenerateColumns = False
  DataGridView1.Columns.Add(New DataGridViewTextBoxColumn() With _
                           {.HeaderText = "ID", _
                            .DataPropertyName = "ID"})
  DataGridView1.Columns.Add(New DataGridViewComboBoxColumn() With _
                           {.HeaderText = "ItemValue", _
                            .DataSource = myList, _
                            .DataPropertyName = "ItemValue"})

  DataGridView1.DataSource = myItems
End Sub

由于您希望在网格中使用组合框,因此必须将
AutoGenerateColumns
设置为false,并自己创建组合框,通过
DataPropertyName
属性将每个列映射到类中的属性。对于组合框,您可以为下拉项列表设置自己的
数据源。

谢谢。我会试试的,谢谢。我试试看。