BindingSource Class
Assembly: System.Windows.Forms (in system.windows.forms.dll)
'Declaration Public Class BindingSource Inherits Component Implements IBindingListView, IBindingList, IList, ICollection, _ IEnumerable, ITypedList, ICancelAddNew, ISupportInitializeNotification, ISupportInitialize, _ ICurrencyManagerProvider 'Usage Dim instance As BindingSource
public class BindingSource extends Component implements IBindingListView, IBindingList, IList, ICollection, IEnumerable, ITypedList, ICancelAddNew, ISupportInitializeNotification, ISupportInitialize, ICurrencyManagerProvider
public class BindingSource extends Component implements IBindingListView, IBindingList, IList, ICollection, IEnumerable, ITypedList, ICancelAddNew, ISupportInitializeNotification, ISupportInitialize, ICurrencyManagerProvider
The BindingSource component serves two purposes. First, it simplifies binding controls on a form to data by providing a layer of indirection, currency management, change notification, and other services. This is accomplished by attaching the BindingSource component to your data source, and then binding the controls on your form to the BindingSource component. All further interaction with the data, including navigating, sorting, filtering, and updating, is accomplished with calls to the BindingSource component.
Second, the BindingSource component can act as a strongly typed data source. Typically the type of the underlying data source is fixed through one of the following mechanisms:
-
Use the Add method to add an item to the BindingSource component.
-
Set the DataSource property to a list, single object, or type.
Both of these mechanisms create a strongly-typed list. BindingSource supports both simple and complex data binding as indicated by its DataSource and DataMember properties.
Note |
|---|
| Because a BindingSource handles both simple and complex data sources, terminology is problematic. Within this class documentation, the term list refers to a data collection within the hosted data source, and item denotes a single element. When discussing functionality associated with complex data sources, the equivalent terms table and row are used. |
BindingSource provides members for accessing the underlying data. The current item can be retrieved through the Current property, and the entire list can be retrieved through the List property. Editing operations are supported on the current item through Current and the RemoveCurrent, EndEdit, CancelEdit and Add and AddNew methods. Although currency management is handled automatically for all underlying data source types, this class exposes a number of events, such as CurrentItemChanged and DataSourceChanged, that allow for customization.
Data sources that are bound to a BindingSource component can also be navigated and managed with the BindingNavigator class, which provides a VCR-like user interface (UI) for navigating items within a list. Although BindingNavigator can be bound to any data source, it was designed to integrate with a BindingSource component through its BindingNavigator.BindingSource property.
The default property for the BindingSource class is DataSource. The default event is CurrentChanged.
Caution |
|---|
| Many of the members of the BindingSource class operate on the underlying list represented by the List property and simply refer their operation to the underlying list. Therefore, when the BindingSource is bound to a custom implementation of IList, the exact behavior of these members may differ from the behavior described in the class documentation. For example, the RemoveAt method calls IList.RemoveAt. The BindingSource documentation describes the RemoveAt method with the understanding that the RemoveAt method for the underlying IList is correctly implemented. |
The following code example demonstrates a ListBox bound to a BindingSource. The BindingSource is bound to a BindingList that contains a list of fonts.
Imports System Imports System.Collections.Generic Imports System.ComponentModel Imports System.Drawing Imports System.Text Imports System.Windows.Forms Public Class Form1 Inherits Form <STAThread()> _ Shared Sub Main() Application.EnableVisualStyles() Application.Run(New Form1()) End Sub Public Sub New() End Sub Private textBox1 As TextBox Private WithEvents button1 As Button Private listBox1 As ListBox Private components As IContainer Private binding1 As BindingSource Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load listBox1 = New ListBox() textBox1 = New TextBox() binding1 = New BindingSource() button1 = New Button() listBox1.Location = New Point(140, 25) listBox1.Size = New Size(123, 160) textBox1.Location = New Point(23, 70) textBox1.Size = New Size(100, 20) textBox1.Text = "Wingdings" button1.Location = New Point(23, 25) button1.Size = New Size(75, 23) button1.Text = "Search" Me.ClientSize = New Size(292, 266) Me.Controls.Add(Me.button1) Me.Controls.Add(Me.textBox1) Me.Controls.Add(Me.listBox1) Dim fonts As New MyFontList() Dim i As Integer For i = 0 To FontFamily.Families.Length - 1 If FontFamily.Families(i).IsStyleAvailable(FontStyle.Regular) Then fonts.Add(New Font(FontFamily.Families(i), 11.0F, FontStyle.Regular)) End If Next i binding1.DataSource = fonts listBox1.DataSource = binding1 listBox1.DisplayMember = "Name" End Sub Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) _ Handles button1.Click If binding1.SupportsSearching <> True Then MessageBox.Show("Cannot search the list.") Else Dim foundIndex As Integer = binding1.Find("Name", textBox1.Text) If foundIndex > -1 Then listBox1.SelectedIndex = foundIndex Else MessageBox.Show("Font was not found.") End If End If End Sub End Class Public Class MyFontList Inherits BindingList(Of Font) Protected Overrides ReadOnly Property SupportsSearchingCore() As Boolean Get Return True End Get End Property Protected Overrides Function FindCore(ByVal prop As PropertyDescriptor, _ ByVal key As Object) As Integer ' Ignore the prop value and search by family name. Dim i As Integer While i < Count If Items(i).FontFamily.Name.ToLower() = CStr(key).ToLower() Then Return i End If i += 1 End While Return -1 End Function End Class
System.MarshalByRefObject
System.ComponentModel.Component
System.Windows.Forms.BindingSource
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see System Requirements.
Note