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
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()
    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


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

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

        ' Initialize the form.
        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 
                Return hisName
            End Get 

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

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

        Public Property Title() As Title
                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
© 2014 Microsoft