public ref class BindingSource : System::ComponentModel::Component, System::Collections::IList, System::ComponentModel::IBindingListView, System::ComponentModel::ICancelAddNew, System::ComponentModel::ISupportInitializeNotification, System::ComponentModel::ITypedList, System::Windows::Forms::ICurrencyManagerProvider
public ref class BindingSource : System::ComponentModel::Component, System::Collections::IList, System::ComponentModel::IBindingListView, System::ComponentModel::ICancelAddNew, System::ComponentModel::ISupportInitialize, System::ComponentModel::ISupportInitializeNotification, System::ComponentModel::ITypedList, System::Windows::Forms::ICurrencyManagerProvider
[System.ComponentModel.ComplexBindingProperties("DataSource", "DataMember")]
public class BindingSource : System.ComponentModel.Component, System.Collections.IList, System.ComponentModel.IBindingListView, System.ComponentModel.ICancelAddNew, System.ComponentModel.ISupportInitializeNotification, System.ComponentModel.ITypedList, System.Windows.Forms.ICurrencyManagerProvider
[System.ComponentModel.ComplexBindingProperties("DataSource", "DataMember")]
public class BindingSource : System.ComponentModel.Component, System.Collections.IList, System.ComponentModel.IBindingListView, System.ComponentModel.ICancelAddNew, System.ComponentModel.ISupportInitialize, System.ComponentModel.ISupportInitializeNotification, System.ComponentModel.ITypedList, System.Windows.Forms.ICurrencyManagerProvider
[<System.ComponentModel.ComplexBindingProperties("DataSource", "DataMember")>]
type BindingSource = class
    inherit Component
    interface IBindingListView
    interface IBindingList
    interface IList
    interface ICollection
    interface IEnumerable
    interface ITypedList
    interface ICancelAddNew
    interface ISupportInitializeNotification
    interface ISupportInitialize
    interface ICurrencyManagerProvider
[<System.ComponentModel.ComplexBindingProperties("DataSource", "DataMember")>]
type BindingSource = class
    inherit Component
    interface IBindingListView
    interface ICollection
    interface IEnumerable
    interface IList
    interface IBindingList
    interface ITypedList
    interface ICancelAddNew
    interface ISupportInitializeNotification
    interface ISupportInitialize
    interface ICurrencyManagerProvider
Public Class BindingSource
Inherits Component
Implements IBindingListView, ICancelAddNew, ICurrencyManagerProvider, IList, ISupportInitializeNotification, ITypedList
Public Class BindingSource
Inherits Component
Implements IBindingListView, ICancelAddNew, ICurrencyManagerProvider, IList, ISupportInitialize, ISupportInitializeNotification, ITypedList
Object
BindingSource

下面的代码示例演示 ListBox 了绑定到 a BindingSource . 绑定到 BindingSource 一个 BindingList<T> 包含字体列表的字体。

using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Text; using System.Windows.Forms; namespace BindingSourceExamples public class Form1 : Form [STAThread] static void Main() Application.EnableVisualStyles(); Application.Run(new Form1()); public Form1() this.Load += new EventHandler(Form1_Load); private TextBox textBox1; private Button button1; private ListBox listBox1; private BindingSource binding1; void Form1_Load(object sender, EventArgs e) 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"; button1.Click += new EventHandler(this.button1_Click); this.ClientSize = new Size(292, 266); this.Controls.Add(this.button1); this.Controls.Add(this.textBox1); this.Controls.Add(this.listBox1); MyFontList fonts = new MyFontList(); for (int i = 0; i < FontFamily.Families.Length; i++) if (FontFamily.Families[i].IsStyleAvailable(FontStyle.Regular)) fonts.Add(new Font(FontFamily.Families[i], 11.0F, FontStyle.Regular)); binding1.DataSource = fonts; listBox1.DataSource = binding1; listBox1.DisplayMember = "Name"; private void button1_Click(object sender, EventArgs e) if (binding1.SupportsSearching != true) MessageBox.Show("Cannot search the list."); int foundIndex = binding1.Find("Name", textBox1.Text); if (foundIndex > -1) listBox1.SelectedIndex = foundIndex; MessageBox.Show("Font was not found."); public class MyFontList : BindingList<Font> protected override bool SupportsSearchingCore get { return true; } protected override int FindCore(PropertyDescriptor prop, object key) // Ignore the prop value and search by family name. for (int i = 0; i < Count; ++i) if (Items[i].FontFamily.Name.ToLower() == ((string)key).ToLower()) return i; return -1; 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 Private 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.") Dim foundIndex As Integer = binding1.Find("Name", textBox1.Text) If foundIndex > -1 Then listBox1.SelectedIndex = foundIndex 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 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

BindingSource 组件有多种用途。 首先,它通过在Windows 窗体控件和数据源之间提供货币管理、更改通知和其他服务来简化对表单的绑定控件。 这是通过使用属性将 BindingSource 组件附加到数据源来实现的 DataSource 。 对于复杂的绑定方案,可以选择将 DataMember 属性设置为数据源中的特定列或列表。 然后将控件绑定到 . BindingSource 与数据进行的所有进一步交互都是通过对组件的调用完成的 BindingSource 。 有关如何简化绑定过程的示例 BindingSource ,请参阅 如何:将Windows 窗体控件绑定到 DBNull 数据库值 以及如何:处理数据绑定发生的错误和异常 。 数据源的导航和更新是通过方法完成的, MoveLast 例如 MoveNext ,和 Remove 。 排序和筛选等操作通过 Sort 属性 Filter 进行处理。 For more information on using sorting and filtering with the BindingSource , see How to: Sort and Filter ADO.NET Data with the Windows Forms BindingSource Component .

此外, BindingSource 组件还可以充当强类型数据源。 通常,基础数据源的类型通过以下机制之一进行修复:

  • Add 使用该方法将项添加到 BindingSource 组件。

  • DataSource 属性设置为列表、单个对象或类型。

    这两种机制都创建强类型列表。 有关如何使用 BindingSource 绑定到类型的详细信息,请参阅 如何:将Windows 窗体控件绑定到类型 。 还可以使用该 BindingSource 控件将控件绑定到工厂对象。 有关如何执行此操作的详细信息,请参阅 如何:将Windows 窗体控件绑定到工厂对象

    由于处理 BindingSource 简单和复杂的数据源,因此术语有问题。 在此类文档中,术语 列表 引用托管数据源中的数据收集, 而项 表示单个元素。 讨论与复杂数据源关联的功能时,将使用等效的术语

    BindingSource 提供用于访问基础数据的成员。 可以通过属性检索 Current 当前项,并且可以通过属性检索 List 整个列表。 当前项 Current RemoveCurrent CancelEdit EndEdit 以及 和 Add AddNew 方法支持编辑操作。 尽管为所有基础数据源类型自动处理货币管理,但此类公开了许多事件,例如 CurrentItemChanged ,允许 DataSourceChanged 自定义的事件。

    还可以使用 BindingNavigator 类导航和管理绑定到 BindingSource 组件的数据源,该类提供类似于 VCR 的用户界面 (UI) ,用于在列表中导航项。 虽然 BindingNavigator 可以绑定到任何数据源,但它旨在通过组件的属性 BindingNavigator.BindingSource BindingSource 组件集成。

    类的默认属性 BindingSource DataSource . 默认事件为 CurrentChanged .

    类的许多成员 BindingSource 对属性表示 List 的基础列表进行操作,只需将其操作引用基础列表即可。 因此,当绑定到自定义实现 IList BindingSource ,这些成员的确切行为可能与类文档中所述的行为不同。 例如, RemoveAt 方法调用 IList.RemoveAt 。 文档 BindingSource 介绍了该方法 RemoveAt ,并了解 RemoveAt 基础 IList 的方法是否正确实现。

  •