Export (0) Print
Expand All

How to: Bind Objects to Windows Forms DataGridView Controls

The following code example demonstrates how to bind a collection of objects to a DataGridView control so that each object displays as a separate row. This example also illustrates how to display a property with an enumeration type in a DataGridViewComboBoxColumn so that the combo box drop-down list contains the enumeration values.

Imports System.Windows.Forms
Imports System.Collections.Generic
Public Enum Title
    King
    Sir
End Enum 
Public Class EnumsAndComboBox
    Inherits Form

    Private flow As New FlowLayoutPanel()
    Private WithEvents checkForChange As Button = New Button()
    Private knights As List(Of Knight)
    Private dataGridView1 As New DataGridView()

    Public Sub New()
        MyBase.New()
        SetupForm()
        SetupGrid()
    End Sub 

    Private Sub SetupForm()
        AutoSize = True 
    End Sub 

    Private Sub SetupGrid()
        knights = New List(Of Knight)
        knights.Add(New Knight(Title.King, "Uther", True))
        knights.Add(New Knight(Title.King, "Arthur", True))
        knights.Add(New Knight(Title.Sir, "Mordred", False))
        knights.Add(New Knight(Title.Sir, "Gawain", True))
        knights.Add(New Knight(Title.Sir, "Galahad", True))

        ' Initialize the DataGridView.
        dataGridView1.AutoGenerateColumns = False
        dataGridView1.AutoSize = True
        dataGridView1.DataSource = knights

        dataGridView1.Columns.Add(CreateComboBoxWithEnums())

        ' Initialize and add a text box column. 
        Dim column As DataGridViewColumn = _
            New DataGridViewTextBoxColumn()
        column.DataPropertyName = "Name"
        column.Name = "Knight"
        dataGridView1.Columns.Add(column)

        ' Initialize and add a check box column.
        column = New DataGridViewCheckBoxColumn()
        column.DataPropertyName = "GoodGuy"
        column.Name = "Good"
        dataGridView1.Columns.Add(column)

        ' Initialize the form.
        Controls.Add(dataGridView1)
        Me.AutoSize = True 
        Me.Text = "DataGridView object binding demo" 
    End Sub 

    Private Function CreateComboBoxWithEnums() As DataGridViewComboBoxColumn
        Dim combo As New DataGridViewComboBoxColumn()
        combo.DataSource = [Enum].GetValues(GetType(Title))
        combo.DataPropertyName = "Title"
        combo.Name = "Title" 
        Return combo
    End Function

#Region "business object" 
    Private Class Knight
        Private hisName As String 
        Private good As Boolean 
        Private hisTitle As Title

        Public Sub New(ByVal title As Title, ByVal name As String, _
            ByVal good As Boolean)

            hisTitle = title
            hisName = name
            Me.good = good
        End Sub 

        Public Property Name() As String 
            Get 
                Return hisName
            End Get 

            Set(ByVal Value As String)
                hisName = Value
            End Set 
        End Property 

        Public Property GoodGuy() As Boolean 
            Get 
                Return good
            End Get 
            Set(ByVal Value As Boolean)
                good = Value
            End Set 
        End Property 

        Public Property Title() As Title
            Get 
                Return hisTitle
            End Get 
            Set(ByVal Value As Title)
                hisTitle = Value
            End Set 
        End Property 
    End Class
#End Region

    Public Shared Sub Main()
        Application.Run(New EnumsAndComboBox())
    End Sub 

End Class
Show:
© 2014 Microsoft