Visual Basic 2005 中的智能客户端数据

 

Visual Basic 2005 中的智能客户端数据

 

发布日期: 7/27/2004 | 更新日期: 7/27/2004

Robert Green

Microsoft Corporation

适用于:

Microsoft Visual Basic 2005 Beta 1

摘要:该演练演示了 Visual Studio 2005 中的几种新增功能,以帮助读者开发可以访问数据的应用程序。

*
本页内容
简介简介
先决条件先决条件
创建数据绑定 Windows 窗体创建数据绑定 Windows 窗体
绑定到现有控件绑定到现有控件
创建一对多窗体创建一对多窗体
将组合框绑定到查找表将组合框绑定到查找表
保存、插入和删除记录保存、插入和删除记录
添加自定义导航控件添加自定义导航控件
向 TableAdapter 添加查询向 TableAdapter 添加查询
返回一个记录 返回一个记录
小结小结

简介

在以前版本的 Visual Studio 中,需要在服务器资源管理器中连接到数据源,然后将表或存储过程拖到窗体上。结果将得到 SQLConnectionSQLDataAdapter,并且用 SelectCommandInsertCommandDeleteCommandUpdateCommand 预先配置。然后,需要执行几个比较费时间的步骤来完成数据绑定窗体,包括将 DataAdapter 配置为生成 DataSet、向窗体中添加控件以及随后添加数据绑定(无论是在代码中还是通过 Properties 窗口)。

Visual Studio 2005 引入了Data Sources Window,通过它不仅可以将绑定设置到基于服务器的数据,还可以设置到本地数据、Web 服务以及您自己的业务对象。将表拖动到窗体会产生数据绑定窗体,该窗体可以处理您在以前的版本中需要手动完成的大多数步骤,包括命名控件、为各个控件添加命名标签以及建立 DataBinding。

在该演练中,您将使用 Visual Basic 2005 探索这些新增的数据功能。

先决条件

要完成该演练,必须在开发计算机上安装下列软件和组件:

Microsoft Visual Studio 2005 Beta 1

Microsoft SQL Server 或 Microsoft SQL Server 桌面引擎 (MSDE)、(MSDE 7.0 或 MSDE 2000),并安装 Northwind 示例数据库。

创建数据绑定 Windows 窗体

在该任务中,您将创建一个简单的数据绑定窗体,而无须编写任何代码。该窗体将如下面的图 1 所示。


1. 示例 Orders 窗体

创建项目

1.

启动 Visual Studio 2005。

2.

File 菜单上,选择 New Project

3.

Templates 窗格中,选择 Windows Application

4.

将该项目命名为 DataWalkthrough。单击 OK

添加数据源

1.

Data 菜单上,选择 Show Data Sources

2.

Data Sources 窗口中,选择 Add New Data Source

数据源代表您的应用程序可以使用的数据。可以使用 Data Source Configuration Wizard 创建一个或多个数据源以便在项目中使用。这些数据源可以是基于服务器的数据库(如 SQL Server 和 Oracle)、本地数据库文件(如 MSDE 或 Access)、Web 服务和业务对象。

3.

单击 Next。这将显示 Choose a Data Source Type 页。

4.

选择 Database

5.

单击 Next。这将显示 Choose Your Data Connection 页。

6.

单击 New Connection

7.

输入相应的信息以连接到您的 SQL Server 或 MSDE 实例。

8.

Select or enter a database name 下拉列表中,选择 Northwind

9.

单击 OK

10.

单击 Next。这将显示 Save connection string 窗格。

11.

选中 Yes, save the connection as

这会将连接字符串保存在新的强类型 Settings 中,后者补充了 App.config 文件。连接信息现在被保存在项目级别,而不是保存在使用数据的各个单独的窗体中。这使得维护以及更改连接信息变得容易得多。

12.

如果您未使用 SQL Server 集成安全性,请选中 Include sensitive data

13.

单击 Next。这将显示 Choose Your Database Objects 页。

14.

展开 Tables 节点以查看数据库中的表。

15.

选择 OrdersOrderDetailsCustomersEmployees 表。

您可以给该页上的数据集赋一个名称。注意,该名称默认为 NorthwindDataSet

16.

单击 Finish

DataSources 窗口是用于查看和处理可供您的项目使用的数据的主窗口。Data Sources 窗口显示了 NorthwindDataSet 以及 OrdersOrderDetailsCustomersEmployees 表。

17.

Data Sources 窗口中,展开 Orders 节点以查看图 2 中所示的表中的每个列。


2. Data Sources 窗口

使用 Dataset Designer

在上一个任务中,您创建了一个数据集。正如您很快将看到的那样,Data Sources 窗口使得创建数据绑定窗体变得很容易。但是在执行该任务之前,您可以使用 Dataset Designer 来处理该数据集中的对象。

1.

Solution Explorer 中,双击 NorthwindDataSet.xsd

Dataset Designer 显示了四个 DataComponents,分别对应于您在设置数据源时选择的各个表。数据组件是数据表和 TableAdapters 的组合,并且是组成强类型数据集的主要项。

TableAdapters 是由 Visual Studio 创建的设计器生成组件。它们类似于带有已配置的 SelectInsertUpdateDelete 命令的强类型数据适配器。TableAdapter 可以包含多个 Select 命令。TableAdapters 具有用于检索数据以及插入、更新和保存数据的强类型方法。这些方法可以包装 Parameters 集合。

2.

选择 Orders 表中的 OrderID 列。

3.

Properties 窗口中,确认 ReadOnly 属性被设置为 True

4.

Caption 属性更改为 OrderID

在下一个任务中,您将把 Order 表字段从 Data Source 窗口拖放到窗体中。这会同时创建数据绑定控件和标签。Orders 表中每个字段的 Caption 将是与各个控件相关联的标签的默认 Caption。

您可以将 OrderID 更改为 Dataset Designer 表面中的 Order ID。然而,这会更改列的 Name 而不是 Caption。

5.

突出显示 CustomerID 列。将 Caption 属性更改为 Customer

6.

突出显示 EmployeeID 列。将 Caption 属性更改为 Employee

7.

根据需要更改其他标题。

将数据拖放到窗体

在该任务中,您将把表从 Data Sources 窗口拖放到窗体上。这会自动创建数据绑定控件,从而节约大量时间和精力。

1.

返回到窗体的设计视图。

2.

Data Sources 窗口中,展开 Orders 节点以查看该表中的列。

3.

选择 Orders 表中的 OrderID。在与该字段相关联的下拉列表中,将控件类型更改为 Label

这样做可以更改在将字段拖放到窗体上时使用的控件。您可以使用任何建议的控件,也可以选择 Customize 并选择用户控件或第三方控件。

选择 Customize 时,将显示 ToolBox 中所有当前可见并且可实现一组新的 DataBinding 属性(DefaultBindingPropertyComplexBindingPropertiesLookupBindingProperties)的控件。

1.

选择 Orders 表中的 CustomerID。在与该字段相关联的下拉列表中,将控件类型更改为 ComboBox

2.

选择 Orders 表中的 EmployeeID。在与该字段相关联的下拉列表中,将控件类型更改为 ComboBox

3.

选择 Orders 表。在与该表相关联的下拉列表中,选择 Details

4.

Orders 表从 Data Sources 窗口拖放到窗体上。

下列对象现在显示在 Component Tray 中:

NorthwindDataSet 是您在配置数据源时创建的数据集。

OrdersTableAdapter。这是一个带有与 Orders 表相关的 SelectInsertUpdateDelete 命令的 TableAdapter

OrdersDataConnectorSystem.Windows.Forms.DataConnector 的一个实例。DataConnector 组件被设计为简化将控件绑定到基础数据源的过程。DataConnector 将 CurrencyManager 从窗体的 BindingContext 中呈现出来。它是一种更加易于使用的、更为直观的、用于对将窗体上的控件绑定到数据进行管理的方法。

OrdersDataNavigatorSystem.Windows.Forms.DataNavigator 的一个实例。DataNavigator 是一种可用来对 Windows 窗体上的数据进行简单导航和操纵的标准化手段。它与 DataConnector 组件配合使用,以遍历窗体上的数据记录并且与它们进行交互。DataNavigator 是一个 Toolstrip 控件,带有用于在记录中导航以及添加、删除和保存记录的按钮。

DataNavigator 是一种可选的 VCR 样式控件,删除它时不会影响任何已配置的 DataBinding。

5.

选择 FreightTextBox 控件。

6.

展开 Properties 窗口中的 DataBinding 列表,如图 3 所示。

注意,FreightTextBox 控件被绑定到 OrdersDataConnector 中的 Freight 列。


3. 查看控件数据绑定

7.

选择 Component Tray 中的 OrdersDataConnector

注意,DataSource 属性被设置为 NorthwindDataSet,而 DataMember 属性被设置为 Orders

8.

选择 OrderIDLabel1 控件。将其 BorderStyle 属性更改为 Fixed3D

9.

Debug 菜单中,选择 Start(或者按 F5)。

窗体将出现,并显示如图 4 中所示的定单。


4. 示例窗体中的主记录

10.

使用导航工具栏中的 Move nextMove previousMove firstMove last 按钮在记录之间滚动。

11.

在导航工具栏中的 Current 位置文本框中,输入 1830 之间的任意数字。按下 Enter 以移动到该记录。

12.

关闭窗体。

13.

Solution Explorer 中,单击 View Code 按钮。

注意 Form1_Load 过程中的以下代码:

Me.OrdersTableAdapter.Fill(Me.NorthwindDataSet.Orders)

上述代码调用了 OrdersTableAdapterFill 方法。TableAdapterFill 方法与 SQLDataAdapterFill 方法的用途类似。它从数据源检索数据,并将这些数据放入指定的数据集中。

绑定到现有控件

在上一个任务中,您通过从 Data Sources 窗口中拖动 Orders 表创建了数据绑定控件。您通常会首先创建这些控件,然后希望对其进行数据绑定。在这一任务中,您将通过把字段从 Data Sources 窗口拖动到控件上来绑定到现有控件。

数据绑定现有控件

1.

返回到窗体的设计视图。

2.

将一个 Textbox 添加到窗体中 CustomerID 组合框的附近。将该文本框命名为 CustomerIDTextBox

3.

Data Sources 窗口中,展开 Orders 节点。

4.

Orders 表中的 CustomerID 列拖动到 CustomerIDTextBox 控件上。

5.

展开 Properties 窗口中的 DataBindings 列表。

注意,CustomerIDTextBox 控件被绑定到 OrdersDataConnector 中的 CustomerID 列。

CustomerID 字段的控件类型仍然被设置为 Data Sources 窗口中的 ComboBox。将 CustomerID 字段拖动到现有控件时,不会将该控件更改为组合框。

6.

Debug 菜单中,选择 Start(或者按 F5)。

窗体将出现,并同时在组合框和您刚刚添加的文本框中显示 CustomerID

7.

关闭窗体。

创建一对多窗体

在这一任务中,您将向数据绑定窗体中添加一个相关表。您将使用弹出菜单指定主-从关系,而不必用代码定义此关系。

向窗体添加相关表

1.

返回到窗体的设计视图。

2.

选择 Component Tray 中的 OrdersDataConnector

3.

Data 菜单中,选择 Configure Master Details。这将显示 Add Related Databound UI 对话框。

4.

选择 Orders 作为父表。

5.

选择 Order Details 作为子表。

6.

选择 Grid 作为 UI style

7.

单击 OK

这会向窗体中添加一个 DataGridView。另外,下列对象将被添加到 ComponentTray

Order_DetailsTableAdapter

FK_Order_Details_OrdersDataConnector

8.

选择 Order_DetailsDataGridView 控件。

注意,DataGridView 的 DataSource 属性被设置为 FK_Order_Details_OrdersDataConnector

9.

选择 Component Tray 中的 FK_Order_Details_OrdersDataConnector

注意,DataSource 属性被设置为 OrdersDataConnector,而 DataMember 属性被设置为 FK_Order_Details_Orders

FK_Order_Details_OrdersDataConnector 内置了 Orders 表和 Order Details 表之间的关系。

配置 DataViewGrid

1.

选择 Order_DetailsDataGridView 控件。

2.

单击出现在网格右上角的箭头。这将显示 Actions 弹出菜单。

3.

选择 Auto Format

4.

Auto Format 对话框中,选择 Professional 2

5.

单击 OK

6.

选择 Actions 弹出菜单中的 Edit Columns

Edit Columns 对话框中,您可以添加或删除列、更改列在网格中的显示顺序、更改列标题文本,等等。

7.

单击 OK

8.

Debug 菜单中,选择 Start(或者按 F5)。

窗体将出现,并显示如图 5 中所示的定单和相关的定单详细信息。


5. 示例窗体中的主记录和详细信息记录

9.

在各个记录之间滚动,并查看各个定单的详细信息记录是否显示在网格中。

10.

关闭窗体。

11.

切换到窗体的代码视图。

注意,以下代码已被添加到 Form1_Load 过程中:

Me.Order_DetailsTableAdapter.Fill(Me.NorthwindDataSet.Order_Details)

将组合框绑定到查找表

该窗体当前含有两个组合框。您希望它们显示客户的姓名和职员的姓名,而不是显示 CustomerIDEmployeeID。在这一任务中,您将把组合框绑定到适当的查找表,以显示所需的姓名。

将 CustomerID 组合框绑定到 Customers 表

1.

返回到窗体的设计视图。

2.

选择 CustomerIDComboBox 控件。

3.

Properties 窗口中,展开与 DataSource 属性相关联的列表。

Orders 和 Order Details 表的 DataConnector 将出现在该列表中,因为它们已经被添加到 Component Tray。然而,您需要 Customers 表中的数据,因此您必须找到并选择 Customers 表。

4.

展开 Other Data Sources 节点。

5.

展开 Project Data Sources 节点。

6.

展开 NorthwindDataSet 节点。

7.

选择 Customers

这会将 CustomerIDComboBox 控件的 DataSource 属性设置为 CustomersDataConnector,如图 6 所示。


6. 设置组合框的 DataSource

注意,下列对象现在被添加到该窗体的 Component Tray

CustomersTableAdapter

CustomersDataConnector

8.

DisplayMember 属性设置为 CompanyName

注意,显示的列来自 Customers 表。

9.

ValueMember 属性设置为 CustomerID

10.

展开 Properties 窗口中的 DataBindings 列表。

11.

右键单击 Text 属性并选择 Reset

12.

展开与 SelectedValue 属性相关联的列表。

13.

展开 OrdersDataConnector 节点。

14.

选择 CustomerID

注意,显示的列来自 Orders 表。

向 Employee 表添加表达式

Employee 表包含对应于 LastNameFirstName 的字段。然而,您希望在组合框中同时显示姓氏和名字。在这一任务中,您将向 Employee 表中添加一个将姓氏和名字组合在一起的列。

1.

切换到 Dataset Designer。

2.

右键单击 Employees 表。

3.

Add 菜单中,选择 Column

4.

Properties 窗口中,将 Name 属性设置为 EmployeeName

5.

Expression 属性设置为:

LastName + ', ' + FirstName

将 EmployeeID 组合框绑定到 Employees 表

1.

返回到窗体的设计视图。

2.

选择 EmployeeIDComboBox 控件。

3.

Properties 窗口中,展开与 DataSource 属性相关联的列表。

Orders、Order Details 和 Customers 表的 DataConnector 显示在该列表中。然而,您需要 Employees 表中的数据,因此您必须找到并选择 Employees 表。

4.

展开 Other Data Sources 节点。

5.

展开 Project Data Sources 节点。

6.

展开 NorthwindDataSet 节点。

7.

选择 Employees

这会将 EmployeeIDComboBox 控件的 DataSource 设置为 EmployeesDataConnector

注意该窗体的 Component Tray 中的下列对象:

EmployeesTableAdapter

EmployeesDataConnector

1.

DisplayMember 设置为 EmployeeName

2.

ValueMember 属性设置为 EmployeeID

3.

展开 Properties 窗口中的 DataBindings 列表。

4.

右键单击 Text 属性并选择 Reset

5.

展开与 SelectedValue 属性相关联的列表。

6.

展开 OrdersDataConnector 节点。

7.

选择 EmployeeID

8.

Debug 菜单中,选择 Start(或者按 F5)。

9.

使用您刚刚添加的按钮在各个记录之间滚动。

窗体将出现,并在各自的组合框中显示客户姓名和职员姓名。

10.

关闭窗体。

保存、插入和删除记录

DataNavigator 工具栏包含一些内置的功能。您已经了解您可以在窗体中导航数据记录。您可能已经注意到,DataNavigator 工具栏上的 AddDelete 按钮已经可用。选择 Add 按钮可向 Orders Datatable 中添加空行,而选择 Delete 按钮可从 Orders Datatable 中删除当前行。

AddDelete 按钮不会对基础数据进行操作。它们只对 Dataset 中的 Orders 表进行操作。除非您将所做的更改保存到基础数据,否则将不会进行任何永久性的更改。当然,这对于使用 ADO.NET 处理数据而言并不是什么新概念。您将必须编写您自己的逻辑来进行保存。这就是默认情况下 DataNavigator 工具栏上的 Save 按钮被禁用的原因。除非您编写代码以保存数据,否则单击该按钮时不会做任何事情。

在这一任务中,您将添加代码以保存和删除窗体上的主记录和详细信息记录。用于保存和删除记录的代码需要考虑 Orders 和 Order Details 之间的主从关系。

您无须添加执行插入操作的代码,因为 DataNavigator 可以添加空行。然而,在这一任务中,您将编写一些代码以自动填充 Orders 记录的 Ship To 列。

保存记录

1.

返回到窗体的代码视图。

2.

要添加一个属性以存储错误消息,请添加以下代码:

Dim dataErrorValue As String
Private Property DataError() As String
    Get
        Return dataErrorValue
    End Get
    Set(ByVal value As String)
        dataErrorValue = value
    End Set
End Property

3.

要创建一个用于保存记录的函数,请在 Form1_Load 方法后添加以下代码:

Private Function SaveChanges() As Boolean
    Try
        OrdersDataConnector.EndEdit()
        FK_Order_Details_OrdersDataConnector.EndEdit()
    Catch ex As Exception
        Me.DataError = ex.Message
        Return False
    End Try

    Try
        OrdersTableAdapter.Update(Me.NorthwindDataSet.Orders)
        Order_DetailsTableAdapter.Update( _
          Me.NorthwindDataSet.Order_Details)
    Catch ex As Exception
        Me.DataError = ex.Message
        Return False
    End Try

    Return True

End Function

注意,Update 方法有多个重载。此处使用的重载接受特定的 DataTable。

4.

返回到窗体的设计视图。

5.

选择 OrdersDataNavigator 控件。

您会发现在 Component Tray 中选择控件极为方便。

6.

选择 dataNavigatorSaveItem 控件。这是 DataNavigator 工具条中的 Save 按钮。

7.

Enabled 属性设置为 True

8.

Properties 窗口中,单击 Events 按钮。这是 Properties 窗口中的闪电形按钮。

9.

双击 Click 事件。

Properties 窗口中的 Events 列表是 Visual Basic 2005 中的新增功能。它使得为事件创建处理程序或者分配现有的处理程序变得非常容易。

10.

将以下代码添加到 dataNavigatorSaveItem_Click 过程中:

If SaveChanges() = True Then
    MessageBox.Show("Changes were saved", "Orders", _
      MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
    MessageBox.Show(Me.DataError, "Orders", _
      MessageBoxButtons.OK, MessageBoxIcon.Information)
End If

11.

Debug 菜单中,选择 Start(或者按 F5)。

12.

为第一个定单的 Ship To Region 输入一个值。

13.

单击 Save 按钮。

14.

关闭窗体。

15.

Debug 菜单中,选择 Start(或者按 F5)。

您将看到您输入的 Ship Region 值。

添加记录

在这一任务中,您将编写代码,以便在 Customer 组合框中的某个客户被选中时,自动填充 Orders 表中的 Ship To 字段。

1.

返回到窗体的设计视图。

2.

选择 CustomerIDComboBox 控件。

3.

Properties 窗口中,单击 Events 按钮。

4.

双击 SelectedIndexChanged 事件。

5.

将以下代码添加到 CustomerIDComboBox_SelectedIndexChanged 过程中:

If CustomerIDComboBox.SelectedIndex <> -1 Then
    Dim customerDataRow As NorthwindDataSet.CustomersRow
    customerDataRow = NorthwindDataSet.Customers( _
      CustomerIDComboBox.SelectedIndex)

    With customerDataRow
        ShipNameTextBox.Text = .CompanyName
        ShipAddressTextBox.Text = .Address
        ShipCityTextBox.Text = .City
        If customerDataRow.IsRegionNull Then
            ShipRegionTextBox.Text = ""
        Else
            ShipRegionTextBox.Text = .Region.ToString
        End If
        If customerDataRow.IsPostalCodeNull Then
            ShipPostalCodeTextBox.Text = ""
        Else
            ShipPostalCodeTextBox.Text = .PostalCode
        End If
        ShipCountryTextBox.Text = .Country

    End With

End If

6.

Debug 菜单中,选择 Start(或者按 F5)。

7.

单击导航工具栏中的 Add new 按钮。

导航工具栏中显示的定单的总数将增加 1 个。

请注意,您仍然位于第一个定单的位置上,而不是位于您正在添加的定单的位置。这在 Beta 1 中是一个问题。要移动到您正在添加的定单的位置,请按导航工具栏中的 Move last 按钮。

8.

Customer 下拉列表中选择一个客户。

注意,Ship To 控件被填充了有关选定客户的适当信息。

9.

Employee 下拉列表中选择一个职员。

10.

输入以下信息以完成该定单

OrderDate = today's date
RequiredDate = any date after today
ShippedDate = any date after today
ShipVia = any number from 1 to 3
Freight = 50.00

11.

单击 DataGridView

注意,网格中的 OrderID 被设置为正确的数字。

12.

输入一个介于 1 和 77 之间的 ProductID

13.

输入一个 Quantity 和一个 UnitPrice

14.

Discount 输入一个数字。

您必须为 Discount 输入相应的内容,因为该列不得为空。

15.

根据需要添加其他定单详细信息记录。

16.

单击 Save 按钮。

17.

关闭窗体。

18.

Debug 菜单中,选择 Start(或者按 F5)。

19.

要确认定单已添加,请导航到最后一个 Orders 记录。

您将看到您输入的 Order 和 Order Details 记录。

删除记录

1.

返回到窗体的代码视图。

2.

要创建用于删除记录的函数,请添加以下代码:

Private Function DeleteOrder() As Boolean
    Dim orderDataRowView As System.Data.DataRowView
    orderDataRowView = OrdersDataConnector.Current
    orderDataRowView.Row.Delete()

    Try
        Dim detailsDataRowView As System.Data.DataRowView
        For Each detailsDataRowView In _
          FK_Order_Details_OrdersDataConnector.List
            detailsDataRowView.Row.Delete()
        Next
    Catch ex As Exception
        Me.DataError = ex.Message
        Return False
    End Try

    Try
        OrdersDataConnector.EndEdit()
        FK_Order_Details_OrdersDataConnector.EndEdit()
    Catch ex As Exception
        Me.DataError = ex.Message
        Return False
    End Try

    Try
        Order_DetailsTableAdapter.Update( _
          Me.NorthwindDataSet.Order_Details)
        OrdersTableAdapter.Update(Me.NorthwindDataSet.Orders)
    Catch ex As Exception
        Me.DataError = ex.Message
        Return False
    End Try

    Return True

End Function

3.

返回到窗体的设计视图。

4.

选择 OrdersDataNavigator 控件。

5.

选择 dataNavigatorDeleteItem 控件。这是 DataNavigator 工具条中的 Delete 按钮。

6.

Properties 窗口中,单击 Events 按钮。

7.

双击 Click 事件。

8.

将以下代码添加到 dataNavigatorDeleteItem_Click 过程中:

If DeleteOrder() = True Then
    MessageBox.Show("Order was deleted", "Orders", _
      MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
    MessageBox.Show(Me.DataError, "Orders", _
      MessageBoxButtons.OK, MessageBoxIcon.Information)
End If

9.

Debug 菜单中,选择 Start(或者按 F5)。

10.

导航到最后一个 Orders 记录。

11.

单击 Delete 按钮。

12.

关闭窗体。

13.

Debug 菜单中,选择 Start(或者按 F5)。

您将再一次看到有 830 个定单。

14.

要确认定单已删除,请导航到最后一个 Orders 记录。

您将看不到您添加的定单。

15.

关闭窗体。

添加自定义导航控件

DataNavigator 是一个方便的控件,但您并非必须使用它。您可以创建您自己的用于导航的控件。在这一任务中,您将向窗体中添加您自己的按钮,以便处理在各个记录之间进行的导航,以及处理保存、插入和删除记录的操作。

添加您自己的数据导航按钮

1.

返回到窗体的设计视图。

2.

选择 OrdersDataNavigator 控件。

3.

Visible 属性设置为 False

注 如果您愿意,还可以删除 OrdersDataNavigator

4.

向窗体中添加一个 MenuStrip 控件。

MenuStrip 控件是窗体上的菜单结构的容器。当您在 MenuStrip 中输入各个菜单命令时,您实际上是在向 MenuStrip 中添加 ToolStripMenuItem 对象。

5.

单击第一个 Type Here 文本框中的菜单条。

6.

输入 First 作为菜单条项目的文本。

7.

按 Tab 键切换到下一个菜单条项目。

8.

输入 Previous

9.

按 Tab 键切换到下一个菜单条项目。

10.

输入 Next

11.

按 Tab 键切换到下一个菜单条项目。

12.

输入 Last

13.

按 Tab 键切换到下一个菜单条项目。

14.

输入 Add

15.

按 Tab 键切换到下一个菜单条项目。

16.

输入 Delete

17.

按 Tab 键切换到下一个菜单条项目。

18.

输入 Save

19.

根据需要调整 MenuStrip1 的大小以增加其大小。

20.

单击出现在菜单条右边框上的箭头。这将显示 Actions 弹出菜单。

每个菜单条项目都具有一个箭头及其自己的 Actions 弹出菜单。这里,你需要整个菜单条的 Actions 弹出菜单,因此您必须单击该菜单条的箭头。作为备选方法,您可以使用 Properties 窗口中的菜单条 Items 属性。

21.

选择 Edit Items。这将显示 Items Collections Editor

22.

Items 列表中,选择 ToolStripSeparator

23.

单击 Add

24.

单击 Up 箭头三次,以使分隔符位于 LastAdd 菜单条项目之间。

25.

单击 OK

添加数据导航代码

1.

选择 FirstToolStripMenuItem 控件。这是菜单条中的 First 菜单命令。

2.

Properties 窗口中,单击 Events 按钮。

3.

双击 Click 事件。

4.

将以下代码添加到 FirstToolStripMenuItem_Click 过程中:

OrdersDataConnector.MoveFirst

5.

选择 PreviousToolStripMenuItem 控件。这是菜单条中的 Previous 菜单命令。

6.

Properties 窗口中,单击 Events 按钮。

7.

双击 Click 事件。

8.

将以下代码添加到 PreviousToolStripMenuItem_Click 过程中:

OrdersDataConnector.MovePrevious

9.

选择 NextToolStripMenuItem 控件。这是 menustrip 中的 Next 菜单命令。

10.

Properties 窗口中,单击 Events 按钮。

11.

双击 Click 事件。

12.

将以下代码添加到 NextToolStripMenuItem_Click 过程中:

OrdersDataConnector.MoveNext

13.

选择 LastToolStripMenuItem 控件。这是 menustrip 中的 Last 菜单命令。

14.

Properties 窗口中,单击 Events 按钮。

15.

双击 Click 事件。

16.

将以下代码添加到 LastToolStripMenuItem_Click 过程中:

OrdersDataConnector.MoveLast

DataConnector 汇集了许多数据任务。这使得 DataConnector 成为一种在应用程序中处理数据的简单而直观的方法。

添加用于执行添加、删除和保存操作的代码

1.

选择 AddToolStripMenuItem 控件。这是菜单条中的 Add 菜单命令。

2.

Properties 窗口中,单击 Events 按钮。

3.

双击 Click 事件。

4.

将以下代码添加到 AddToolStripMenuItem_Click 过程中:

OrdersDataConnector.AddNew()

默认情况下,DataNavigator 的 Add 按钮调用上述代码。

5.

选择 DeleteToolStripMenuItem 控件。这是菜单条中的 Delete 菜单命令。

6.

Properties 窗口中,单击 Events 按钮。

7.

双击 Click 事件。

8.

将以下代码添加到 DeleteToolStripMenuItem_Click 过程中:

If DeleteOrder() = True Then
    MessageBox.Show("Order was deleted", "Orders", _
      MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
    MessageBox.Show(Me.DataError, "Orders", _
      MessageBoxButtons.OK, MessageBoxIcon.Information)
End If

上述代码与您在前面与 DataNavigator 的 Delete 按钮相关联的代码相同。

9.

选择 SaveToolStripMenuItem 控件。这是菜单条中的 Save 菜单命令。

10.

Properties 窗口中,单击 Events 按钮。

11.

双击 Click 事件。

12.

将以下代码添加到 SaveToolStripMenuItem_Click 过程中:

If SaveChanges() = True Then
    MessageBox.Show("Changes were saved", "Orders", _
      MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
    MessageBox.Show(Me.DataError, "Orders", _
      MessageBoxButtons.OK, MessageBoxIcon.Information)
End If

上述代码与您在前面与 DataNavigator 的 Save 按钮相关联的代码相同。

13.

Debug 菜单中,选择 Start(或者按 F5)。

14.

使用您刚刚添加的按钮在各个记录之间滚动。

15.

按照前面的做法添加一个新的定单。保存该定单。

16.

删除该定单。

窗体所具有的行为应该与您使用 DataNavigator 工具栏时的行为相同。

17.

关闭窗体。

向 TableAdapter 添加查询

当您将 Orders 和 Order Details 表拖动到窗体时,您创建了 TableAdapterTableAdapter 具有用于检索数据以及执行插入、更新和删除操作的方法。这些方法基于 InsertUpdateDelete 语句或基于存储过程。

并未限制您只能使用通过拖放过程生成的方法。在这一任务中,您将向 Orders TableAdapter 添加一个查询,以返回个别定单而不是所有定单。

添加基于 OrderID 返回定单的查询

1.

返回到 Dataset Designer。

2.

选择 OrdersTableAdapter

3.

右键单击 OrdersTableAdapter 并从弹出菜单中选择 Add Query。 这将显示 Data Component Query Configuration Wizard

4.

单击 Next

5.

选择 Create new stored procedure

如果您没有在数据库中创建存储过程的权限,则可以在该步骤中选择 Use SQL statements

6.

单击 Next

7.

选择 SELECT which returns rows

8.

单击 Next

9.

将以下代码添加到 Select 语句的末尾:

WHERE OrderID = @orderID

10.

单击 Next

如果您不创建新的存储过程,请跳至步骤 14。

11.

将该存储过程命名为 OrdersByID

12.

选择 Yes, create it in the database for me 复选框。

13.

单击 Next

14.

将第一个 Method Name 更改为 FillByOrderID

15.

将第二个 Method Name 更改为 GetDataByOrderID

16.

单击 Finish

注意,您添加的方法出现在 OrdersTableAdapter 中,如图 7 所示。


7. 向 TableAdapter 添加查询

返回一个记录

在这一任务中,您将更改数据输入窗体以使用您刚刚创建的查询。这将使用户可以返回一个定单而不是所有定单。

限制从服务器检索到的定单记录

1.

返回到窗体的设计视图。

2.

向该窗体添加一个 MaskedTextBox。将其命名为 OrderIDMaskedTextbox

3.

单击出现在屏蔽文本框右侧的箭头。这将显示 Actions 弹出菜单。

4.

选择 Set the mask associated with the control

5.

Mask 文本框中输入 99999。这会将数据输入限制为数字。

6.

单击 OK

7.

在您刚刚添加的屏蔽文本框的旁边添加一个 button。将其命名为 FindOrderButton。将该按钮的 Text 属性设置为 Find this order

8.

再向该屏蔽文本框的旁边添加一个 button。将其命名为 AllOrdersButton。将该按钮的 Text 属性设置为 All Orders

9.

将以下代码添加到 FindOrderButton_Click 过程中:

Me.OrdersTableAdapter.FillByOrderID( _
  Me.NorthwindDataSet.Orders, OrderIDMaskedTextBox.Text)
OrderIDMaskedTextBox.Text = ""

10.

将以下代码添加到 AllOrdersButton_Click 过程中:

Me.OrdersTableAdapter.Fill(Me.NorthwindDataSet.Orders)
OrderIDMaskedTextBox.Text = ""

11.

Debug 菜单中,选择 Start(或者按 F5)。

12.

在您添加的文本框中输入 10456

13.

单击 Find this Order

注意,现在窗体中加载了一个定单记录。

14.

单击 All Orders

注意,又一次将所有定单记录加载到窗体中。

15.

关闭窗体。

小结

Visual Studio 2005 包含几种新增功能,这些功能使得构建可以访问数据的应用程序变得更加容易。Data Sources 窗口和 Dataset Designer 提供了用于处理基础数据的结构的方便场所。从 Data Sources 中拖放列和表即可创建数据绑定控件,而无须在代码中或在 Properties 窗口中设置数据绑定。TableAdapterDataConnector 组件致力于提供一种更为直观的在客户端操纵数据的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值