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

Visual Basic 6.0 sp6 简体中文企业版(附MSDN) Visual Basic 6.0中文企业版(独家推出,CD-KEY全部为1或者0) VB编程语言历史========= Visual Basic从1991年诞生以来,现在已经13年了。BASIC是微软的起家产品,微软当然不忘了这位功臣。随着每一次微软技术的浪潮,Visual Basic都会随之获得新生。可以预见,将来无论微软又发明了什么技术或平台,Visual Basic一定会首先以新的姿态登上去... 阅读详情
 

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 中,需要在服务器资源管理器中连接到数据源,然后将表或存储过程拖到窗体上。结果将得到 SQLConnection 和 SQLDataAdapter,并且用 SelectCommand、InsertCommand、DeleteCommand 和 UpdateCommand 预先配置。然后,需要执行几个比较费时间的步骤来完成数据绑定窗体,包括将 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.

选择 Orders、OrderDetails、Customers 和 Employees 表。

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

16.

单击 Finish。

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

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 创建的设计器生成组件。它们类似于带有已配置的 Select、Insert、Update 和 Delete 命令的强类型数据适配器。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 属性(DefaultBindingProperty、ComplexBindingProperties 或 LookupBindingProperties)的控件。

1.

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

2.

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

3.

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

4.

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

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

•

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

•

OrdersTableAdapter。这是一个带有与 Orders 表相关的 Select、Insert、Update 和 Delete 命令的 TableAdapter。

•

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

•

OrdersDataNavigator 是 System.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 next、Move previous、Move first 和 Move last 按钮在记录之间滚动。

11.

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

12.

关闭窗体。

13.

在 Solution Explorer 中,单击 View Code 按钮。

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

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

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

绑定到现有控件

在上一个任务中,您通过从 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)

将组合框绑定到查找表

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

将 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 表包含对应于 LastName 和 FirstName 的字段。然而,您希望在组合框中同时显示姓氏和名字。在这一任务中,您将向 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 工具栏上的 Add 和 Delete 按钮已经可用。选择 Add 按钮可向 Orders Datatable 中添加空行,而选择 Delete 按钮可从 Orders Datatable 中删除当前行。

Add 和 Delete 按钮不会对基础数据进行操作。它们只对 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 箭头三次,以使分隔符位于 Last 和 Add 菜单条项目之间。

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 表拖动到窗体时,您创建了 TableAdapter。TableAdapter 具有用于检索数据以及执行插入、更新和删除操作的方法。这些方法基于 Insert、Update 和 Delete 语句或基于存储过程。

并未限制您只能使用通过拖放过程生成的方法。在这一任务中,您将向 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 窗口中设置数据绑定。TableAdapter 和 DataConnector 组件致力于提供一种更为直观的在客户端操纵数据的方法。

转到原英文页面

15、深入探索Visual Basic 2005在CE设备上的应用开发 本文详细介绍了如何使用Visual Basic 2005为CE设备(以eBox-4300为例)开发串行端口通信的智能设备应用程序。内容涵盖开发环境配置、CE运行时映像构建、设备连接建立、应用程序开发与部署、测试验证等关键步骤,并深入分析了CoreCon组件的作用、串行端口访问机制、注册表配置等技术要点。同时,提供了常见问题的解决方案及扩展应用建议,帮助开发者全面掌握在Windows CE平台上使用VB进行应用开发的完整流程和技术细节。 阅读详情

相关推荐

Visual Basic 2005高级编程实战指南(第4版)

本文还有配套的精品资源,点击获取 简介:本书深入探讨了Visual Basic 2005编程语言的高级特性和技术,旨在指导读者高效实现高质量的应用程序开发。书中提供了源代码文件,使读者能够通过实践加深理解。本书详细介绍了Visual Basic 2005的多种特性,包括改进的IDE、初步的Linq、泛型、面向服务的编程、Windows Forms、*** 2.0、增强的异常...

weixin_29885875的博客 1377

.net 控件开发常见的特性总结

 在.net开发中常常需要使用一些[]里面的特性描述,我发现对常用的几个知道大概的意思,但是却不甚清楚到底有多少个特性,都如何使用。所以今天查了下msdn,把他们一一总结下来。这些特性(属性)在System.ComponentModel下面,凡是带有Attribute结尾的的类都是可以作为方括号里面使用的。我将它们一一摘录下来,并且写上了自己的理解。AttributeUsageAttribute用法:[AmbientValue(typeof(Color), "Empty")] [Category("App

技术专栏 9806

快速入门:Visual Studio 2005 IDE精简指南

Visual Studio 2005 是一款由微软公司开发的集成开发环境(IDE),主要用于开发.NET Framework应用程序。自发布以来,它就因其强大的功能和用户友好的界面被广大开发人员所青睐。Visual Studio 2005 提供了代码编辑、调试、数据库设计以及项目管理等工具,极大地提高了软件开发效率。快速访问功能是Visual Studio提供的一个强大的特性,它允许用户快速地查找和执行命令,而无需深入了解其具体位置。你可以通过Ctrl + Q。

weixin_30661119的博客 789

DataGridView 有关文摘

DataGridView demos from todays TechEd Malaysia session UPDATE: Here is the demo code from todays session on the DataGridView control.Thanks to Joe Stegman from the Windows Client team at Micros

2066的专栏 1887

Visual Basic与SQL Server交互教程与实例

Visual Basic (VB) 是一种历史悠久且用户友好的编程语言,它源自于BASIC语言家族。VB的设计宗旨是让编程变得简单易学,适合于快速开发Windows应用程序。它的集成开发环境(IDE)提供了拖放式的设计工具和事件驱动编程模式,使得开发者可以无需深入底层细节即可构建功能丰富的应用。在IT行业的发展历程中,VB曾是众多企业应用、桌面软件和个人项目的首选语言。它简洁的语法和可视化的操作方式极大地降低了编程的门槛,帮助非专业的程序员也能参与到软件开发的行列中。

weixin_33670640的博客 835

Comsol&Matlab 亥姆霍兹共振消声器传递损失理论解与仿真解

当外界噪声以共振频率进入共振器时,共振器内的空气质量发生周期性的振动,从而减少或消除噪声。当特定频率的声波进入共振器时,共振器的空气质量会发生周期性的振动,从而实现对该频率的噪声的减弱或消除。5. 反射和吸收:共振器的几何形状和容积还可以影响共振器内空气振动的反射和吸收。然而,对于不同频率的噪声,需要相应调整共振器的参数以匹配新的共振频率。3. 腔体内的空气振动:当特定频率的声波进入共振器时,共振器内的空气质量会发生振动。2. 声波进入共振器:外界的声波通过共振器的颈部进入共振器的封闭空腔。

声学黑洞仿真工作室 4571

微软的Webcasts系列讲座

3D游戏开发步步高系列课程(1):3D视频游戏开发介绍.NET Framework 2.0 中Web Services开发.NET Framework 2.0 中Web Services开发.NET框架类在ASP.NET中的使用(2).NET框架类在ASP.NET中的使用(2).NET框架类在ASP.NET中的使用(2)Smart Client系列课程(9):创建动态可配置智能客户端应用...

avm8523362的博客 455

Lane、PHY和Preset Value Bit

每个Lane支持不同的传输速度和带宽,例如PCIe 3.0中,一个Lane的传输速度可以达到8 GT/s(Giga Transfers per second),也就是1 GB/s(GigaBytes per second)。Preset Value Bit(预置值位)是在PCIe 3.0的Lane上新引入的一种机制,用于优化信号传输质量。PCIe设备可以包含多个Lane,例如x1、x4、x8、x16等,表示该设备同时使用的Lane数目,比如x16表示该设备采用了16个Lane,具有更高的传输速度和带宽。

weixin_58083606的博客 1296

[译]Visual Basic 2005在语言上的增强(二)My

从Visual Basic 6.0甚至是更早版本迁移到.NET平台下的开发人员所面临的一个主要挑战就是.NET框架本身庞大的规模及其命名空间层次中繁多的类。经常使用的应用程序以及环境变量都可以在.NET框架下的BCL(Base Class Library,涕淌注。)中找到,不过能熟练地定位它们是需要时间的。Visual Basic 2005中的这个新的My层次为许多频繁使用的框架库提供了便捷的、组

涕淌居 3903

Ubuntu升级遇到grub-efi-amd64-signed报错?3步搞定这个烦人的EFI目录问题

本文详细解析了Ubuntu系统升级时遇到的“grub-efi-amd64-signed”报错及“cannot find EFI directory”问题。通过剖析UEFI启动机制与EFI系统分区原理,提供了从诊断到修复的三步解决方案,帮助用户快速解决因EFI目录未挂载导致的升级中断,确保系统引导正常。

assembly8low的博客 584

腾讯文档API逆向分析:不用Selenium也能批量导出的黑科技

本文揭秘了如何通过Python逆向分析腾讯文档的隐藏API,实现无需Selenium即可批量导出在线表格的高效方法。详细解析了API调用流程、Cookie维护及异常处理技巧,相比传统方案性能提升显著,适用于大量文档导出的自动化场景。

h9j8k7l6m5n的博客 1201

Visual Basic 2005 的新特性

《Introducing Visual Basic 2005》中看到的一些VB2005的新特性· Edit-And-Continue VB2005可以像VB6那样实行Edit-And-Continue功能。这个功能在调试环境中至关重要,但是很遗憾在Visual Studio .NET 2002和2003里面没有提供。不过现在Edit-And-Continue功能又回来了。用户可以在调试过程中根

.NET 开发学习之旅 876

车辆动力学从入门到进阶之路(传统篇)

新手如何入门车辆动力学开发领域,本文为您引路!

CrazyRabbit的博客 1万+

Refactor!——Visual Basic 2005的重构

概述 不知从何时起,“重构”这个词走进了我们的编程生活。通过重构,程序员可以在确保程序功能不变的情况下消除代码中的“坏味道”和隐患,使代码更加可读并且易于扩展。重构的应用越来越频繁,依照传统的方法一次一小步地进行重构,并利用单元测试来确保重构结果正确性的方法也显得越来越繁琐。于是与IDE结合的自动重构工具就流行起来了。这些自动重构工具可以分析代码,然后找出重构操作影响到的每一处代码,一...

weixin_30599769的博客 128

Xilinx系ZYNQ学习笔记(一)Vivado使用说明

vivado使用学习

贾saisai的博客 1873

姿态传感器/陀螺仪之LSM6DSLTR应用驱动程序设计

* LSM6DSLTR I2C地址(SA0=1) *//* 初始化LSM6DSLTR传感器(加速度计±2g,陀螺仪±250°/s) *//* 加速度计灵敏度 *//* 角速度值(°/s) *//* I2C句柄 *//* 陀螺仪灵敏度 *//* 加速度值(g) *//* 温度值(°C) *//* 设备地址 *//* IF_INC=1: 自动增量地址 *//* 10Hz采样率 *//* 配置I2C1引脚:PB6->SCL, PB7->SDA *//* 转换为实际温度值(°C),参考手册中温度计算公式 */

corlin6688的博客 394

Visual Studio 2005项目模板丢失的解决办法

今天发觉我的Visual Studio Team Suite(RC)中的项目模板丢失了许多,也就是说新建一个项目时,很多项目模板找不到,正好博客堂蝈蝈俊.Net刚发布了一个解决方案: VS2005新建项目找不到工程模版错误的解决方法。但我手边并没有一个正常的环境,因此无法用这个办法解决。然后,我在Microsoft Forum上搜了一下,其实只须在命令行中运行一下devenv ...

aonian7053的博客 277

在 Zynq 7010 上运行 VxWorks 7.0 的详细流程【持续更新】

本文介绍了在Zynq 7010开发板上运行VxWorks 7.0的完整流程。主要包括:1)使用Vivado创建硬件设计,配置Zynq模块并生成比特流文件;2)通过Workbench 4创建VxWorks工程,配置启动参数并生成镜像;3)下载运行步骤。此外还讲解了使用Workbench 4开发VSB和VIP工程的方法,包括工程创建、配置和调试流程。文中提供了关键操作截图和注意事项,为开发者提供了完整的Zynq 7010平台VxWorks开发解决方案。

weixin_45397344的博客 1223

Programming Microsoft Visual Basic 2005: The Language

«Programming Microsoft Visual Basic 2005: The Language» 2New Ed editionMicrosoft Press | ISBN 0735621837 | January 2006 | 990 Pages | CHM 8,7 MbGet the expert insights, indispensable reference,

Linhanshi Blog 953

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Expert One-on-One Visual Basic 2005 Database Programming

Expert One-on-One Visual Basic 2005 Database Programming (Expert One-On-One) by Roger JenningsPublisher: Wrox (December 19, 2005) | ISBN-10: 076457678X | PDF | 12 Mb | 624 pagesAre you hesitant

Linhanshi Blog 937

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

[译]Visual Basic 2005在语言上的增强(三)XML注释

XML注释允许你在代码中添加结构化的文档,并且因为这是C#最先采用的技术,Visual Basic程序员觊觎已久了。XML注释能够描述各种各样的代码元素,包括类、字段成员、方法、以及枚举等等。一旦你创建了一个描述代码特性的XML注释,当你继续在编辑器里键入代码特性时,你立刻会得到关于参数和返回值的智能感知。假设你现在有一个标志着如下签名的函数原型:Private Function GetCusto

涕淌居 3409

Visual Basic 2005新功能——泛型

事实上,泛型是.NET Framework 2.0所支持的一项特别的功能,Visual Basic 2005只不过从语言层面上支持他,就像C#和C++/CLI一样。首先,我们从泛型本身介绍起。需求我们常常会有一种需求,就是我们编写的代码能够针对多种类型执行。比如排序,检索,集合的操作等等。这些操作的代码应该能够只编写一次,就能够广泛地用于所有类型。.NET Framework 1.1或更早

苹果专栏 1345

第 1 章 面向 Visual Basic开发人员的 Microsoft .NET Framework入门指南

 第 1 章 面向 Visual Basic开发人员的 Microsoft .NET Framework入门指南 欢迎来到 MSDN > 开发语言和工具 第 1 章 面向 Visual Basic开发人员的 Microsoft .NET Framework

shanghaif的专栏 2383

Visual Studio 2005 Express Edition

中文名: Visual Studio 2005 Express Edition `速成版` 中/英文正式版资源格式: 光盘镜像版本: 软件资源区推荐软件--置顶1个月发行时间: 2006年制作发行: Microsoft地区: 美国简介: Visual.Studio.2005.Express.Edition.中文正式版.iso详情664MBVisual.Studio.2005.Express.Edition.英文正式版.iso详情<br /><br /><br />[已通过安全检测] 瑞星 2006 病毒库:

Kevin_cyt的专栏 1407
上一篇: 一个初级的使用GDI+开发的颜色拾取器用户控件
下一篇: 使用多线程使软件界面具有较好的响应性
xmlscript
博客等级 码龄25年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值