How to: Bind a Windows Forms Control to a Type
When you are building controls that interact with data, you will sometimes find it necessary to bind a control to a type, rather than an object. This situation arises especially at design time, when data may not be available, but your data-bound controls still need to display information from a type's public interface. For example, you may bind a DataGridView control to an object exposed by a Web service and want the DataGridView control to label its columns at design time with the member names of a custom type.
You can easily bind a control to a type with the BindingSource component.
The following code example demonstrates how to bind a DataGridView control to a custom type by using a BindingSource component. When you run the example, you'll notice the DataGridView has labeled columns that reflect the properties of a Customer object, before the control is populated with data. The example has an Add Customer button to add data to the DataGridView control. When you click the button, a new Customer object is added to the BindingSource. In a real-world scenario, the data might be obtained by a call to a Web service or other data source.
Imports System Imports System.Collections.Generic Imports System.ComponentModel Imports System.Data Imports System.Drawing Imports System.Windows.Forms Class Form1 Inherits Form Private bSource As New BindingSource() Private WithEvents button1 As Button Private dgv As New DataGridView() Public Sub New() Me.button1 = New System.Windows.Forms.Button() Me.button1.Location = New System.Drawing.Point(140, 326) Me.button1.Name = "button1" Me.button1.AutoSize = True Me.button1.Text = "Add Customer" Me.ClientSize = New System.Drawing.Size(362, 370) Me.Controls.Add(Me.button1) ' Bind the BindingSource to the DemoCustomer type. bSource.DataSource = GetType(DemoCustomer) ' Set up the DataGridView control. dgv.Dock = DockStyle.Top Me.Controls.Add(dgv) ' Bind the DataGridView control to the BindingSource. dgv.DataSource = bSource End Sub Public Shared Sub Main() Application.Run(New Form1()) End Sub Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) _ Handles button1.Click bSource.Add(New DemoCustomer(DateTime.Today)) End Sub End Class ' This simple class is used to demonstrate binding to a type. Public Class DemoCustomer Public Sub New() idValue = Guid.NewGuid() End Sub Public Sub New(ByVal FirstOrderDate As DateTime) FirstOrder = FirstOrderDate idValue = Guid.NewGuid() End Sub ' These fields hold the data that backs the public properties. Private firstOrderDateValue As DateTime Private idValue As Guid Private custNameValue As String Public Property CustomerName() As String Get Return custNameValue End Get Set(ByVal value As String) custNameValue = value End Set End Property ' This is a property that represents the first order date. Public Property FirstOrder() As DateTime Get Return Me.firstOrderDateValue End Get Set(ByVal value As DateTime) If value <> Me.firstOrderDateValue Then Me.firstOrderDateValue = value End If End Set End Property ' This is a property that represents a customer ID. Public ReadOnly Property ID() As Guid Get Return Me.idValue End Get End Property End Class
Compiling the Code
This example requires:
References to the System and System.Windows.Forms assemblies.
For information about building this example from the command line for Visual Basic or Visual C#, see Building from the Command Line (Visual Basic) or Command-line Building With csc.exe. You can also build this example in Visual Studio by pasting the code into a new project. Also see How to: Compile and Run a Complete Windows Forms Code Example Using Visual Studio.