Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Languages / VB

Binding a generic collection to a DataGridView via Visual Basic 2008 code

2.55/5 (9 votes)
16 Mar 2008CPOL2 min read 1   1.6K  
Binding a generic collection to a DataGridView in VB 2008, with a few lines of code.

Introduction

I needed to bind a DataGridView to a generic collection of custom classes, in an application written in Visual Basic 2008. The objective to reach was that, whenever editing, adding, or deleting items from the DataGridView, the collection gets updated and vice versa.

Using the Code

The .NET Framework exposes a very useful object called BindingSource. This can be used also at design-time, but in this particular case, you’re not allowed to bind objects which are not defined as classes. In my own situation, I had to instantiate a collection inside a module, so this is a scenario which is not reachable at design-time using a BindingSource, but it is by writing a few lines of code. Let’s suppose we have the typical example class for learning, which is the Person class:

VB
Public Class Person
    Private _lastName As String
    Private _name As String

    Public Property LastName() As String
        Get
            Return _lastName
        End Get
        Set(ByVal value As String)
            _lastName = value
        End Set
    End Property

    Public Property Name() As String
        Get
            Return _name
        End Get
        Set(ByVal value As String)
            _name = value
        End Set
    End Property

    Public Sub New()

    End Sub

    Public Sub New(ByVal name As String, ByVal lastName As String)
        _name = name
        _lastName = lastName
    End Sub
End Class

Now, let’s suppose we need to instantiate a collection of Person objects. In my own situation, this happens inside a Module, but in the example, it can happen inside the Sub Main of a Console application. This is the code:

VB
Dim People As New List(Of Person)

The next step is to instantiate a BindingSource object and then assign its DataSource property to the above collection:

VB
Dim PeopleBindingSource As New BindingSource
PeopleBindingSource.DataSource = People

In the Form containing the DataGridView, assign its DataSource property like this:

VB
PeopleDataGridView.DataSource = PeopleBindingSource

Points of Interest

This kind of data-binding allows to simultaneously update the DataGridView and the bound collection, whichever of the two objects you’re going to edit. Moreover, in this particular case, if the AutoGenerateColumns property of the DataGridView control is set to True, the .NET Framework automatically generates as many columns as there are properties in the bound class (in our case, two columns, Name and LastName). Obviously, if you write code like the one shown above, you don’t need to set any data-binding property at design-time. I hope this article can be useful since on the Internet I found only articles about collections data-binding to a DataGridView where data is not editable, or the solution is only available in C#.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)