65.9K
CodeProject 正在变化。 阅读更多。
Home

C# 2.0 中的 BindingSource 和 BindingNavigator

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.35/5 (42投票s)

2006年9月14日

5分钟阅读

viewsIcon

407047

downloadIcon

9021

在这篇简单的文章中,我想展示如何在 C# 2.0 中使用新的组件 BindingSource 和 BindingNavigator。

引言

在这篇简单的文章中,我想展示如何在 C# 2.0 中使用新的组件 BindingSourceBindingNavigator

BindingSource 提供了在数据源中导航记录的最简单方法。它旨在简化将控件绑定到底层数据源的过程。而 BindingNavigator 通常与 BindingSource 控件配对,用于在表单上遍历数据记录并与其进行交互。为了运行应用程序并直观地看到它的效果,我添加了 Northwind 数据库,命名为 installNorthwind.sql,其中仅包含 Customers 表。

您可能找不到 Microsoft SQL Server 2005 中的 Northwind 和 Pubs 示例数据库,因为它们默认不安装。但您可以从 Microsoft 网站下载这些数据库。

什么是 BindingSource?

C# 2.0 中的新组件 BindingSourceCurrencyManager 的替代品。尽管您仍然可以使用 CurrencyManager,但 BindingSource 组件是将 Windows Forms 控件绑定到数据源的首选方式。

它支持窗体中的控件元素的绑定,可以看作是 *数据源* 和控件元素之间的链接。它提供了优于传统数据绑定的优势,例如:

  • 封装 CurrencyManager 的功能,并在设计时公开 CurrencyManager 事件。
  • 与其他数据相关的 Windows Forms 控件互操作,例如 BindingNavigatorDataGridView 控件。

BindingSource 类的默认属性是 DataSource。默认事件是 CurrentChangedBindingSource 提供了许多方法、属性和事件,如 CurrentItemChangedDataSourceChanged,允许进行自定义。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()

要看到 BindingSourceBindingNavigator 工作最简单的方法如下:选择菜单选项:数据-->显示数据源-->添加新数据源。在建立连接后,选择一个 DataSet,然后选择一个表,您将在数据源窗口中看到您选择的表。从那里,您可以将该表拖放到 Windows Form 上,您将获得拖放表中数据的 DataGridView,其中包括自动生成的 BindingSourceDataSetTableAdapterBindingSource

但我们想走另一条路,我认为这是理解和查看 BindingSourceBindingNavigator 如何协同工作的更好方式。

首先,从 *工具箱* 中将五个 TextBox、六个 Label、四个 Button 和一个 BindingSource 拖放到窗体上。

BindingSource

现在,我们需要调整对象的两个属性,以便清晰地找到数据源,它们是:

  • DataSource
  • DataMember

在属性窗口中设置 DataSource 后,单击“添加项目数据源...”

BindingSource

在下一个对话框窗口中,您选择数据库,然后单击“下一步”。

BindingSource

通过“下一步”按钮,您将进入一个新的对话框。在这里,您可以搜索一个可用的数据库连接,或者创建一个新连接。

BindingSource

单击“下一步”按钮后,您将看到以下对话框,您可以在其中选择数据库对象,换句话说:在这里选择“Customer”表并勾选它,然后单击“完成”按钮。

BindingSource

现在,您已经创建并添加了一个新的类型化 DataSetnorthwindDataSet”,正如您所看到的。在属性窗口中标记 DataMember,然后单击“Customers”表。现在,将创建一个 TableAdapterTableAdapter 类似于 DataAdapter,但与 DataTable 相关。例如:如果它描述“Customers”表,则 TableAdapter 的名称是 customersTableAdapter;对于“Authors”表,名称将是 authorsTableAdapter 等等。

现在,您必须将所有控件元素(TextBox)与 BindingSource 对象组合起来。您可以通过每个 TextBox 的属性窗口中的“DataBinding”条目来完成此操作。

BindingSource

标记 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 上的控件。

在大多数情况下,BindingNavigatorBindingSource 控件结合使用,以在 Windows Forms 上遍历数据记录。如果您想为用户添加其他或替代命令,则可以轻松修改 BindingNavigator 组件。

BindingNavigator 是:

  • 一个 VCR(录像机)控件,与 BindingSource 一起使用。
  • 基于 ToolStrip
  • 可扩展且可插拔。

现在,从工具箱中将一个 BindingNavigator 拖放到窗体上,Windows Forms Designer 会默认将其放在顶部。

BindingNavigator

最后,这引导我们完成了最后一步。BindingNavigator 仍然不知道数据源的位置。我们必须告诉 BindingNavigator 它的数据源是什么。在 Form1[Design] 中标记 bindingNavigator1,并将 BindingNavigator 控件的 BindingSource 属性设置为窗体上的 BindingSource(此处为:bindingSource1)。

BindingNavigator

现在 BindingNavigator 已准备好执行其任务,作为数据源和控件元素之间的链接。

而且...

如果您想深入了解 BindingNavigatorBindingSource 的其他功能,网络上有很多资源。我特别推荐 Microsoft MSDN 网站。

希望这篇文章能有所帮助。

编程愉快。

© . All rights reserved.