BindingSource 组件.docx
《BindingSource 组件.docx》由会员分享,可在线阅读,更多相关《BindingSource 组件.docx(52页珍藏版)》请在冰豆网上搜索。

BindingSource组件
BindingSource组件
.NETFramework4.5
其他版本
此主题尚未评级 - 评价此主题
封装数据源以绑定到控件。
BindingSource 组件有两个用途。
首先,它提供一个将窗体上的控件绑定到数据的间接层。
这是通过将 BindingSource 组件绑定到数据源,然后将窗体上的控件绑定到 BindingSource 组件来完成的。
与数据的所有进一步交互(包括导航、排序、筛选和更新)都是通过调用 BindingSource 组件来完成的。
其次,BindingSource 组件可以充当强类型数据源。
使用 Add 方法向 BindingSource 组件添加类型会创建一个该类型的列表。
本节内容
BindingSource组件概述
介绍 BindingSource 组件的一般概念,该组件用于将数据源绑定到控件。
如何:
将Windows窗体控件绑定到DBNull数据库值
演示如何使用 BindingSource 组件处理来自数据源的 DBNull 值。
如何:
使用Windows窗体BindingSource组件对ADO.NET数据进行排序和筛选
演示如何使用 BindingSource 组件向显示的数据应用排序和筛选器。
如何:
使用Windows窗体BindingSource绑定到Web服务
演示如何使用 BindingSource 组件绑定到Web服务。
如何:
处理因数据绑定而发生的错误和异常
演示如何使用 BindingSource 组件正确处理数据绑定操作中发生的错误。
如何:
将Windows窗体控件绑定到类型
演示如何使用 BindingSource 组件绑定到类型。
如何:
将Windows窗体控件绑定到Factory对象
演示如何使用 BindingSource 组件绑定到工厂对象或方法。
如何:
使用Windows窗体BindingSource自定义项添加
演示如何使用 BindingSource 组件创建新的项并将这些项添加到数据源。
如何:
使用BindingSourceResetItem方法引发更改通知
演示如何使用 BindingSource 组件为不支持更改通知的数据源引发更改通知事件。
如何:
使用BindingSource和INotifyPropertyChanged接口引发更改通知
演示如何将从 INotifyPropertyChanged 继承的类型与 BindingSource 控件一起使用。
如何:
使用BindingSource在Windows窗体控件中反映数据源更新
演示如何使用 BindingSource 组件响应数据源中的更改。
如何:
使用BindingSource组件跨窗体共享绑定数据
演示如何使用 BindingSource 将多个窗体绑定到同一数据源。
Topic
Location
如何:
使用设计器将Windows窗体控件与BindingSource组件进行绑定
Windows窗体控件
如何:
使用Windows窗体BindingSource组件创建查找表
Windows窗体控件
如何:
使用设计器将Windows窗体控件绑定到类型
Windows窗体控件
如何:
使用设计器将Windows窗体控件与BindingSource组件进行绑定
Windows窗体控件
如何:
使用设计器将Windows窗体控件绑定到类型
Windows窗体控件
如何:
使用Windows窗体BindingSource组件创建查找表
Windows窗体控件
如何:
使用设计器将Windows窗体控件与BindingSource组件进行绑定
Windows窗体控件
如何:
使用设计器将Windows窗体控件绑定到类型
Windows窗体控件
如何:
使用Windows窗体BindingSource组件创建查找表
Windows窗体控件
如何:
使用设计器将Windows窗体控件与BindingSource组件进行绑定
dv_mclictl
如何:
使用设计器将Windows窗体控件绑定到类型
dv_mclictl
如何:
使用Windows窗体BindingSource组件创建查找表
dv_mclictl
如何:
使用设计器将Windows窗体控件与BindingSource组件进行绑定
dv_mclictl
如何:
使用设计器将Windows窗体控件绑定到类型
dv_mclictl
如何:
使用Windows窗体BindingSource组件创建查找表
如何:
使用设计器将Windows窗体控件与BindingSource组件进行绑定
.NETFramework4.5
其他版本
此主题尚未评级 - 评价此主题
将控件添加到窗体并确定应用程序的用户界面后,可以将控件绑定到数据源,这样用户就可以在运行时改变和保存与应用程序相关的数据。
将 BindingSource 控件用作窗体上的控件和数据源之间的桥梁,能够最轻松地完成Windows窗体中一个控件或一系列控件的绑定。
可以将窗体上的一个或多个控件绑定到数据;在下面的过程中,将一个 TextBox 控件绑定到一个数据源。
为了完成此过程,假定将绑定到派生自数据库的数据源。
有关从其他数据存储区创建数据源的更多信息,请参见 数据源概述。
说明
显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您现用的设置或版本。
若要更改设置,请在“工具”菜单上选择“导入和导出设置”。
有关更多信息,请参见 VisualStudio设置。
在设计时绑定控件
1.将 TextBox 控件拖到窗体上。
2.在“属性”窗口中:
a.展开“(DataBindings)”节点。
b.单击 Text 属性旁边的箭头。
此时将打开“DataSource”UI类型编辑器。
如果以前已经为项目或窗体配置了数据源,将显示此数据源。
3.单击“添加项目数据源”以连接到数据并创建一个数据源。
4.在“数据源配置向导”欢迎页上单击“下一步”。
5.在“选择数据源类型”页上选择“数据库”。
6.在“选择您的数据连接”页上,从可用连接列表中选择一个数据连接。
如果所需的数据连接不可用,请选择“新建连接”以创建新的数据连接。
7.选择“是,保存连接”,以保存应用程序配置文件中的连接字符串。
8.选择要放置到应用程序中的数据库对象。
在此例中,在表中选择一个希望显示 TextBox 的字段。
9.如果愿意,可以替换默认的数据集名称。
10.单击“完成”。
11.在“属性”窗口中,再次单击 Text 属性旁的箭头。
在“DataSource”UI类型编辑器中,选择要将 TextBox 绑定到的字段的名称。
“DataSource”UI类型编辑器关闭,并且特定于该数据连接的数据集、BindingSource 和表适配器将添加到窗体中。
如何:
将Windows窗体控件绑定到DBNull数据库值
.NETFramework4.5
其他版本
此主题尚未评级 - 评价此主题
将Windows窗体控件绑定到数据源,而数据源返回 DBNull 值时,不经过处理、格式化或分析事件就可以替代相应值。
格式化或分析数据源值时,NullValue 属性将 DBNull 转换为指定对象。
示例
下面的示例演示如何在两种不同情况下绑定 DBNull 值。
第一种情况演示如何设置字符串属性的 NullValue;第二种情况演示如何设置图像属性的 NullValue。
C#
VB
ImportsSystem
ImportsSystem.Collections.Generic
ImportsSystem.ComponentModel
ImportsSystem.Data
ImportsSystem.Drawing
ImportsSystem.Text
ImportsSystem.Data.SqlClient
ImportsSystem.Windows.Forms
PublicClassForm1
InheritsForm
PublicSubNew()
EndSub
'Thecontrolsandcomponentsweneedfortheform.
PrivateWithEventsbutton1AsButton
PrivatepictureBox1AsPictureBox
PrivatebindingSource1AsBindingSource
PrivatetextBox1AsTextBox
PrivatetextBox2AsTextBox
'Datatabletoholdthedatabasedata.
PrivateemployeeTableAsNewDataTable()
PrivateSubForm1_Load(ByValsenderAsObject,ByValeAsEventArgs)_
HandlesMe.Load
'Basicformsetup.
Me.pictureBox1=NewPictureBox()
Me.bindingSource1=NewBindingSource()
Me.textBox1=NewTextBox()
Me.textBox2=NewTextBox()
Me.button1=NewButton()
Me.pictureBox1.Location=NewSystem.Drawing.Point(20,20)
Me.pictureBox1.Size=NewSystem.Drawing.Size(174,179)
Me.textBox1.Location=NewSystem.Drawing.Point(25,215)
Me.textBox1.ReadOnly=True
Me.textBox2.Location=NewSystem.Drawing.Point(25,241)
Me.textBox2.ReadOnly=True
Me.button1.Location=NewSystem.Drawing.Point(200,103)
Me.button1.Text="MoveNext"
Me.ClientSize=NewSystem.Drawing.Size(292,273)
Me.Controls.Add(Me.button1)
Me.Controls.Add(Me.textBox2)
Me.Controls.Add(Me.textBox1)
Me.Controls.Add(Me.pictureBox1)
Me.ResumeLayout(False)
Me.PerformLayout()
'Createtheconnectionstringandpopulatethedatatable
'withdata.
DimconnectionStringAsString="IntegratedSecurity=SSPI;"&_
"PersistSecurityInfo=False;InitialCatalog=Northwind;"_
&"DataSource=localhost"
DimconnectionAsNewSqlConnection()
connection.ConnectionString=connectionString
DimemployeeAdapterAsNewSqlDataAdapter_
(NewSqlCommand("Select*fromEmployees",connection))
connection.Open()
employeeAdapter.Fill(employeeTable)
'SettheDataSourcepropertyoftheBindingSourcetotheemployeetable.
bindingSource1.DataSource=employeeTable
'SetupthebindingtotheReportsTocolumn.
DimreportsToBindingAsBinding=_
textBox2.DataBindings.Add("Text",bindingSource1,"ReportsTo",_
True)
'SettheNullValuepropertyforthisbinding.
reportsToBinding.NullValue="NoManager"
'SetupthebindingforthePictureBoxusingtheAddmethod,setting
'thenullvalueinmethodcall.
pictureBox1.DataBindings.Add("Image",bindingSource1,"Photo",_
True,DataSourceUpdateMode.Never,_
NewBitmap(GetType(Button),"Button.bmp"))
'Setuptheremainingbinding.
textBox1.DataBindings.Add("Text",bindingSource1,"LastName",True)
EndSub
'Movethroughthedatawhenthebuttonisclicked.
PrivateSubbutton1_Click(ByValsenderAsObject,_
ByValeAsEventArgs)Handlesbutton1.Click
bindingSource1.MoveNext()
EndSub
_
SharedSubMain()
Application.EnableVisualStyles()
Application.Run(NewForm1())
EndSub
EndClass
绑定的属性和 NullValue 属性的类型必须相同,否则将发生错误,而且不会再处理 NullValue 值。
在这种情况下,不会引发异常。
如何:
使用Windows窗体BindingSource组件创建查找表
.NETFramework4.5
其他版本
此主题尚未评级 - 评价此主题
查找表是一种数据表,其中有一列显示另一个相关表的记录数据。
在下面的过程中,使用了一个 ComboBox 控件来显示具有外键关系父、子表的字段。
为了帮助实现这两个表和这种关系的可视化,下面是一个父、子表的示例:
CustomersTable(父表)
CustomerID
CustomerName
712
PaulKoch
713
TamaraJohnston
OrdersTable(子表)
OrderID
OrderDate
CustomerID
903
2004年2月12日
712
904
2004年2月13日
713
在这一情形下,表CustomersTable存储了需要显示和保存的实际信息。
但为了节省空间,此表省略了大部分数据。
另一张表OrdersTable只包含有关哪个客户ID号等同于哪个订单日期和订单ID的表面相关信息, 并没有提及客户的名称。
在 ComboBox控件(Windows窗体) 控件上设置了4种重要属性来创建查找表。
∙DataSource 属性包含查找表的名称。
∙DisplayMember 属性包含查找表中要作为控件文本(客户名称)显示的数据列。
∙ValueMember 属性包含查找表中具有存储信息(父表中的ID号)的数据列。
∙SelectedValue 属性根据 ValueMember 为子表提供查找值。
下面的过程演示了如何将窗体布局成为一个查找表,并将数据绑定到它上面的控件。
为了成功完成这个过程,必须像上面提到的一样有一个带有存在外键关系的父表和子表的数据源。
创建用户界面
1.从“工具箱”中将一个 ComboBox 控件中拖动到窗体上。
此控件将显示父表的列。
2.拖动其他的控件来显示子表的详细信息。
表中数据的格式决定了应当选择哪一种控件。
有关更多信息,请参见 根据功能列出的Windows窗体控件。
3.将一个 BindingNavigator 控件拖到窗体上,这将允许您定位子表中的数据。
连接数据并将其绑定到控件
1.选择 ComboBox 并单击“智能任务”标志符号以显示“智能任务”对话框。
2.选择“使用数据绑定项”。
3.单击“数据源”下拉框旁边的箭头。
如果以前已经为项目或窗体配置了数据源,将显示该数据源;否则,完成下面的步骤(此示例使用Northwind示例数据库中的Customers表和Orders表,并在括号中引用它们)。
a.单击“添加项目数据源”以连接到数据并创建一个数据源。
b.在“数据源配置向导”欢迎页上单击“下一步”。
c.在“选择数据源类型”页面上选择“数据库”。
d.从“选择数据连接”页上的可用连接列表中选择一个数据连接。
如果希望的数据连接不可用,则选择“新连接”以创建一个新的数据连接。
有关更多信息,请参见“添加/修改连接”对话框(通用)。
e.单击“是,保存连接”将连接字符串保存到应用程序配置文件中。
f.选择要放置到应用程序中的数据库对象。
在这种情况下,选择具有外键关系的一个父表和一个子表(例如Customers和Orders)。
g.如果愿意,可以替换默认的数据集名称。
h.单击“完成”。
4.在“显示成员”下拉框中,选择将在组合框中显示的列名(例如,ContactName)。
5.在“值成员”下拉框中,选择在子表中进行查找操作的列(例如,CustomerID)。
6.在“选定值”下拉框中,定位到“项目数据源”和刚创建的包含父表和子表的数据集。
选择与父表的值成员相同的子表属性(例如,Orders.CustomerID)。
将创建适当的 BindingSource、数据集和表适配器组件,并添加到窗体中。
7.将 BindingNavigator 控件绑定到子表的 BindingSource(例如,OrdersBindingSource)。
8.从想要显示的子表的 BindingSource(例如,OrdersBindingSource)中,将除了 ComboBox 和 BindingNavigator 外的控件绑定到详细信息字段上。
如何:
使用Windows窗体BindingSource组件对ADO.NET数据进行排序和筛选
.NETFramework4.5
其他版本
此主题尚未评级 - 评价此主题
您可以通过 Sort 和 Filter 属性公开 BindingSource 控件的排序和筛选功能。
当基础数据源为 IBindingList 时可以应用简单排序,当数据源为 IBindingListView 时可以应用筛选和高级排序。
Sort 属性需要标准ADO.NET语法:
在表示数据源中数据列名的字符串之后加上 ASC 或 DESC,以指示该列表应按升序排序,还是应按降序排序。
通过用逗号分隔符隔开每一列,可以设置高级排序或多列排序。
Filter 属性获取字符串表达式。
说明
将敏感信息(如密码)存储在连接字符串中可能会影响您的应用程序的安全性。
若要控制对数据库的访问,一种较为安全的方法是使用Windows身份验证(也称为集成安全性)。
有关更多信息,请参见保护连接信息。
使用BindingSource筛选数据
∙将 Filter 属性设置为所需的表达式。
在下面的代码示例中,表达式就是在列名之后加上该列所需的值。
C#
VB
BindingSource1.Filter="ContactTitle='Owner'"
使用BindingSource进行数据排序
1.将 Sort 属性设置为后面要跟有 ASC 或 DESC 的所需列名称,以指示是按升序还是降序排序。
2.用逗号分隔多个列。
C#
VB
BindingSource1.Sort="CountryDESC,AddressASC"
示例
下面的代码示例将Northwind示例数据库的Customers表中的数据加载到 DataGridView 控件中,然后对显示的数据进行筛选和排序。
C#
VB
PrivateSubInitializeSortedFilteredBindingSource()
'Createtheconnectionstring,dataadapteranddatatable.
DimconnectionStringAsNewSqlConnection("InitialCatalog=Northwind;"&_
"DataSource=localhost;IntegratedSecurity=SSPI;")
DimcustomersTableAdapterAsNewSqlDataAdapter("Select*fromCustomers",_
connectionString)
DimcustomerTableAsNewDataTable()
'Fillthetheadapterwiththecontentsofthecustomertable.
customersTableAdapter.Fill(customerTable)
'SetdatasourceforBindingSource1.
BindingSource1.DataSource=customerTable
'Filtertheitemstoshowcontactswhoareowners.
BindingSource1.Filter="ContactTitle='Owner'"
'Sorttheitemsonthecompanynameindescendingorder.
BindingSource1.Sort="CountryDESC,AddressASC