C# 2.0 中的 BindingSource 和 BindingNavigator






4.35/5 (42投票s)
2006年9月14日
5分钟阅读

407047

9021
在这篇简单的文章中,我想展示如何在 C# 2.0 中使用新的组件 BindingSource 和 BindingNavigator。
引言
在这篇简单的文章中,我想展示如何在 C# 2.0 中使用新的组件 BindingSource
和 BindingNavigator
。
BindingSource
提供了在数据源中导航记录的最简单方法。它旨在简化将控件绑定到底层数据源的过程。而 BindingNavigator
通常与 BindingSource
控件配对,用于在表单上遍历数据记录并与其进行交互。为了运行应用程序并直观地看到它的效果,我添加了 Northwind 数据库,命名为 installNorthwind.sql,其中仅包含 Customers 表。
您可能找不到 Microsoft SQL Server 2005 中的 Northwind 和 Pubs 示例数据库,因为它们默认不安装。但您可以从 Microsoft 网站下载这些数据库。
什么是 BindingSource?
C# 2.0 中的新组件 BindingSource
是 CurrencyManager
的替代品。尽管您仍然可以使用 CurrencyManager
,但 BindingSource
组件是将 Windows Forms 控件绑定到数据源的首选方式。
它支持窗体中的控件元素的绑定,可以看作是 *数据源* 和控件元素之间的链接。它提供了优于传统数据绑定的优势,例如:
- 封装
CurrencyManager
的功能,并在设计时公开CurrencyManager
事件。 - 与其他数据相关的 Windows Forms 控件互操作,例如
BindingNavigator
和DataGridView
控件。
BindingSource
类的默认属性是 DataSource
。默认事件是 CurrentChanged
。BindingSource
提供了许多方法、属性和事件,如 CurrentItemChanged
和 DataSourceChanged
,允许进行自定义。Position
属性获取或设置底层列表中当前项的索引。MoveLast()
方法将 Position
属性的当前值更改为底层数据源中最后一项的索引,该索引等于 Count
属性的值减 1。
例如
//attach the BindingSource to the DataGridView.
this.customersDataGridView1.DataSource = this.customersBindingSource1;
或
//gets the total number of the items.
int count = this.flagsBindingSource.Count;
或
//gets or sets the index of the current item.
int pos = this.customersBindingSource1.Position;
或
//moves to the last item in the list.
//MoveLast() OR equivalent
this.bindingSource1.Position = this.bindingSource1.Count - 1;
更多信息:Microsoft MSDN。
Windows 应用程序中使用 »BindingSource« 进行数据绑定
如果您想如前所述在数据源中导航记录,BindingSource
提供了更好、更简单的方法。您可以将 BindingSource
组件绑定到数据源,然后像稍后将看到的那样,将 TextBox
等控件绑定到 BindingSource
。然后,我们可以使用 BindingSource
上的内置导航方法,如 MoveNext()
、MovePrevious()
、MoveFirst()
和 MoveLast()
。
要看到 BindingSource
和 BindingNavigator
工作最简单的方法如下:选择菜单选项:数据-->显示数据源-->添加新数据源。在建立连接后,选择一个 DataSet
,然后选择一个表,您将在数据源窗口中看到您选择的表。从那里,您可以将该表拖放到 Windows Form 上,您将获得拖放表中数据的 DataGridView
,其中包括自动生成的 BindingSource
、DataSet
、TableAdapter
和 BindingSource
。
但我们想走另一条路,我认为这是理解和查看 BindingSource
和 BindingNavigator
如何协同工作的更好方式。
首先,从 *工具箱* 中将五个 TextBox
、六个 Label
、四个 Button
和一个 BindingSource
拖放到窗体上。
现在,我们需要调整对象的两个属性,以便清晰地找到数据源,它们是:
DataSource
DataMember
在属性窗口中设置 DataSource
后,单击“添加项目数据源...”
在下一个对话框窗口中,您选择数据库,然后单击“下一步”。
通过“下一步”按钮,您将进入一个新的对话框。在这里,您可以搜索一个可用的数据库连接,或者创建一个新连接。
单击“下一步”按钮后,您将看到以下对话框,您可以在其中选择数据库对象,换句话说:在这里选择“Customer”表并勾选它,然后单击“完成”按钮。
现在,您已经创建并添加了一个新的类型化 DataSet
“northwindDataSet
”,正如您所看到的。在属性窗口中标记 DataMember
,然后单击“Customers”表。现在,将创建一个 TableAdapter
。TableAdapter
类似于 DataAdapter
,但与 DataTable
相关。例如:如果它描述“Customers”表,则 TableAdapter
的名称是 customersTableAdapter
;对于“Authors”表,名称将是 authorsTableAdapter
等等。
现在,您必须将所有控件元素(TextBox
)与 BindingSource
对象组合起来。您可以通过每个 TextBox
的属性窗口中的“DataBinding
”条目来完成此操作。
标记 textBoxCustId
,然后在属性窗口中扩展“DataBinding
”条目。单击 Text
,然后在此处选择“CustomerID
”列。将 textBoxCompanyName
与“CompanyName
”列组合,依此类推。
此时,我们已完成了将所有 TextBox
控件绑定到 BindingSource
。
BindingSource 的导航方法
MoveNext(), MovePrevious(), MoveFirst(), 和 MoveLast()
以下是用于导航的按钮(Next、Previous、First、Last)的 Click
事件的事件处理程序。
Next 按钮
private void btNext_Click(object sender, EventArgs e)
{
if (this.bindingSource1.Position + 1 < this.bindingSource1.Count)
{
this.bindingSource1.MoveNext();
this.fnDisplayPosition();
}
}
Previous 按钮
private void btPrevious_Click(object sender, EventArgs e)
{
this.bindingSource1.MovePrevious();
this.fnDisplayPosition();
}
First 按钮
private void btFirst_Click(object sender, EventArgs e)
{
this.bindingSource1.MoveFirst();
this.fnDisplayPosition();
}
Last 按钮
private void btLast_Click(object sender, EventArgs e)
{
this.bindingSource1.MoveLast();
this.fnDisplayPosition();
}
显示当前记录的位置
private void fnDisplayPosition()
{
this.labelPosition.Text = this.bindingSource1.Position +
1 + " of " + this.bindingSource1.Count;
}
您可以运行应用程序,现在四个导航按钮应该都能正常工作了。但我们还没有实现 BindingNavigator
。
什么是 BindingNavigator?
BindingNavigator
控件代表了一种在窗体上导航和操作数据的标准方式。它是一个特殊用途的 ToolStrip
控件,用于导航和操作 Windows Forms 上的控件。
在大多数情况下,BindingNavigator
与 BindingSource
控件结合使用,以在 Windows Forms 上遍历数据记录。如果您想为用户添加其他或替代命令,则可以轻松修改 BindingNavigator
组件。
BindingNavigator
是:
- 一个 VCR(录像机)控件,与
BindingSource
一起使用。 - 基于
ToolStrip
。 - 可扩展且可插拔。
现在,从工具箱中将一个 BindingNavigator
拖放到窗体上,Windows Forms Designer 会默认将其放在顶部。
最后,这引导我们完成了最后一步。BindingNavigator
仍然不知道数据源的位置。我们必须告诉 BindingNavigator
它的数据源是什么。在 Form1[Design] 中标记 bindingNavigator1
,并将 BindingNavigator
控件的 BindingSource
属性设置为窗体上的 BindingSource
(此处为:bindingSource1
)。
现在 BindingNavigator
已准备好执行其任务,作为数据源和控件元素之间的链接。
而且...
如果您想深入了解 BindingNavigator
和 BindingSource
的其他功能,网络上有很多资源。我特别推荐 Microsoft MSDN 网站。
希望这篇文章能有所帮助。
编程愉快。