BindingSource 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
封装窗体的数据源。
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
- 继承
- 属性
- 实现
示例
下面的代码示例演示 ListBox 了绑定到 的 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)
{
MessageBox.Show("Cannot search the list.");
}
else
{
int foundIndex = binding1.Find("Name", textBox1.Text);
if (foundIndex > -1)
listBox1.SelectedIndex = foundIndex;
else
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.")
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
注解
组件 BindingSource 有多种用途。 首先,它通过在Windows 窗体控件和数据源之间提供货币管理、更改通知和其他服务,简化了窗体上对数据的绑定。 这是通过使用 属性将 BindingSource 组件附加到数据源来实现的 DataSource 。 对于复杂的绑定方案,可以选择将 DataMember 属性设置为数据源中的特定列或列表。 然后,将控件绑定到 BindingSource。 与数据的所有进一步交互都是通过调用 组件完成的 BindingSource 。 有关如何简化绑定过程的示例BindingSource,请参阅如何:将Windows 窗体控件绑定到 DBNull 数据库值和如何:处理数据绑定时发生的错误和异常。 通过 、 和 等MoveNextMoveLast方法实现数据源的导航和Remove更新。 排序和筛选等操作通过 Sort 和 Filter 属性进行处理。 有关在 中使用排序和筛选BindingSource的详细信息,请参阅如何:使用 Windows 窗体 BindingSource 组件对 ADO.NET 数据进行排序和筛选。
此外,组件 BindingSource 还可以充当强类型数据源。 通常,基础数据源的类型通过以下机制之一进行修复:
Add使用 方法将项添加到 BindingSource 组件。
将 DataSource 属性设置为列表、单个对象或类型。
这两种机制都创建强类型列表。 有关如何使用 BindingSource 绑定到类型的详细信息,请参阅如何:将Windows 窗体控件绑定到类型。 还可以使用 BindingSource 将控件绑定到工厂对象。 有关如何执行此操作的详细信息,请参阅如何:将Windows 窗体控件绑定到工厂对象。
注意
由于 同时 BindingSource 处理简单和复杂的数据源,因此术语存在问题。 在此类文档中,术语 列表 是指托管数据源中的数据收集, 项 表示单个元素。 在讨论与复杂数据源关联的功能时,将使用等效的 术语表 和 行 。
BindingSource 提供用于访问基础数据的成员。 可以通过 属性检索 Current 当前项,并通过 属性检索 List 整个列表。 通过 Current 和 、 EndEditCancelEdit 和 RemoveCurrentAddAddNew 方法支持对当前项执行编辑操作。 尽管为所有基础数据源类型自动处理货币管理,但此类会公开许多允许自定义的事件,如 CurrentItemChanged 和 DataSourceChanged。
绑定到组件的数据源 BindingSource 也可以使用 类进行导航和管理 BindingNavigator ,类提供类似于 VCR 的用户界面 (UI) ,用于导航列表中的项。 尽管BindingNavigator可以绑定到任何数据源,但它旨在通过BindingNavigator.BindingSource组件属性与BindingSource组件集成。
类的默认属性 BindingSource 为 DataSource。 默认事件为 CurrentChanged。
注意
类的许多成员 BindingSource 对 属性表示的基础列表进行操作, List 并且只是将其操作引用到基础列表。 因此,当 绑定到 的IList自定义实现时BindingSource,这些成员的确切行为可能与类文档中描述的行为不同。 例如, RemoveAt 方法调用 IList.RemoveAt。 本文档 BindingSource 介绍 方法, RemoveAt 并了解 RemoveAt 基础 IList 的 方法已正确实现。
构造函数
BindingSource() |
将 BindingSource 类的新实例初始化为默认属性值。 |
BindingSource(IContainer) |
初始化 BindingSource 类的新实例,并将 BindingSource 添加到指定的容器。 |
BindingSource(Object, String) |
用指定的数据源和数据成员初始化 BindingSource 类的新实例。 |
属性
AllowEdit |
获取一个值,该值指示是否可以编辑基础列表中的项。 |
AllowNew |
获取或设置一个值,该值指示是否可以使用 AddNew() 方法向列表中添加项。 |
AllowRemove |
获取一个值,它指示是否可从基础列表中移除项。 |
CanRaiseEvents |
获取一个指示组件是否可以引发事件的值。 (继承自 Component) |
Container |
获取包含 IContainer 的 Component。 (继承自 Component) |
Count |
获取在的基础列表中项的总数。获取在基础列表中项的总数,考虑当前 Filter 值。 |
CurrencyManager |
获取与此 BindingSource 关联的当前项管理器。 |
Current |
获取列表中的当前项。 |
DataMember |
获取或设置连接器当前绑定到的数据源中的特定列表。 |
DataSource |
获取或设置连接器绑定到的数据源。 |
DesignMode |
获取一个值,用以指示 Component 当前是否处于设计模式。 (继承自 Component) |
Events |
获取附加到此 Component 的事件处理程序的列表。 (继承自 Component) |
Filter |
获取或设置用于筛选查看哪些行的表达式。 |
IsBindingSuspended |
获取一个值,该值指示列表绑定是否已挂起。 |
IsFixedSize |
获取一个值,该值指示基础列表是否具有固定大小。 |
IsReadOnly |
获取一个值,该值指示基础列表是否为只读。 |
IsSorted |
获取一个值,该值指示是否可以对基础列表中的项排序。 |
IsSynchronized |
获取一个值,该值指示对集合的访问是否为同步的(线程安全)。 |
Item[Int32] |
获取或设置指定索引处的列表元素。 |
List |
获取连接器绑定到的列表。 |
Position |
获取或设置基础列表中当前项的索引。 |
RaiseListChangedEvents |
获取或设置一个值,该值指示是否应引发 ListChanged 事件。 |
Site | (继承自 Component) |
Sort |
获取或设置用于排序的列名称以及用于查看数据源中的行的排序顺序。 |
SortDescriptions |
获取应用于数据源的排序说明的集合。 |
SortDirection |
获取列表中项的排序方向。 |
SortProperty |
获取正在用于对列表进行排序的 PropertyDescriptor。 |
SupportsAdvancedSorting |
获取一个值,它指示数据源是否支持多列排序。 |
SupportsChangeNotification |
获取一个值,它指示数据源是否支持更改通知。 |
SupportsFiltering |
获取一个值,该值指示数据源是否支持筛选。 |
SupportsSearching |
获取一个值,它指示数据源是否支持使用 Find(PropertyDescriptor, Object) 方法进行搜索。 |
SupportsSorting |
获取一个值,它指示数据源是否支持排序。 |
SyncRoot |
获取可用于同步对基础列表的访问的对象。 |
方法
事件
AddingNew |
在将项添加到基础列表之前发生。 |
BindingComplete |
当所有客户端都已绑定到此 BindingSource 时发生。 |
CurrentChanged |
在当前绑定项更改时发生。 |
CurrentItemChanged |
在 Current 属性的属性值更改后发生。 |
DataError |
当货币相关的异常由 BindingSource 无提示处理时发生。 |
DataMemberChanged |
在 DataMember 属性值更改后发生。 |
DataSourceChanged |
在 DataSource 属性值更改后发生。 |
Disposed |
在通过调用 Dispose() 方法释放组件时发生。 (继承自 Component) |
ListChanged |
当基础列表更改或列表中的项更改时发生。 |
PositionChanged |
在 Position 属性的值更改后发生。 |
显式接口实现
IBindingList.AddIndex(PropertyDescriptor) |
将 PropertyDescriptor 添加到用于搜索的索引。 |
IBindingList.RemoveIndex(PropertyDescriptor) |
将 PropertyDescriptor 从用于搜索的索引中移除。 |
ICancelAddNew.CancelNew(Int32) |
丢弃集合中挂起的新项。 |
ICancelAddNew.EndNew(Int32) |
向集合提交挂起的新项。 |
ISupportInitialize.BeginInit() |
用信号通知 BindingSource 初始化即将开始。 |
ISupportInitialize.EndInit() |
用信号通知 BindingSource 初始化已完成。 |
ISupportInitializeNotification.Initialized |
初始化 BindingSource 时出现。 |
ISupportInitializeNotification.IsInitialized |
获取一个值,该值指示是否初始化 BindingSource。 |
扩展方法
Cast<TResult>(IEnumerable) |
将 IEnumerable 的元素强制转换为指定的类型。 |
OfType<TResult>(IEnumerable) |
根据指定类型筛选 IEnumerable 的元素。 |
AsParallel(IEnumerable) |
启用查询的并行化。 |
AsQueryable(IEnumerable) |
将 IEnumerable 转换为 IQueryable。 |