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
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
的方法是否正确实现。