演练:在 Windows 应用程序的不同窗体间传递数据

更新:2007 年 11 月

本演练提供分步说明,介绍如何将数据从一个窗体传递到另一个窗体。通过使用来自 Northwind 的客户和订单表,一个窗体允许用户选择客户,而另一个窗体会显示所选择客户的订单。本演练演示如何在窗体上创建从第一个窗体接收数据的方法。

说明:

此演练仅演示在窗体之间传递数据的一种方法。向窗体传递数据还可以有其他选择,包括以下方法:创建另一个构造函数来接收数据,或者创建一个可用第一个窗体的数据进行设置的公共属性。

本演练演示如下任务:

  • 创建新的“Windows 应用程序”项目。

  • 使用数据源配置向导创建并配置数据集。

  • 选择从“数据源”窗口拖动某些项时要在窗体上创建的控件。有关更多信息,请参见如何:设置从“数据源”窗口中拖动时要创建的控件

  • 通过将某些项从“数据源”窗口拖到窗体上来创建数据绑定控件。

  • 创建具有网格的第二个窗体来显示数据。

  • 创建一个 TableAdapter 查询来获取特定客户的订单。

  • 在窗体间传递数据。

先决条件

若要完成本演练,您需要:

创建 Windows 应用程序

创建新的 Windows 项目

  1. 从“文件”菜单创建一个新的项目。

  2. 将项目命名为 PassingDataBetweenForms。

  3. 选择“Windows 应用程序”,然后单击“确定”。有关更多信息,请参见创建基于 Windows 的应用程序

    “PassingDataBetweenForms”项目即被创建并添加到“解决方案资源管理器”中。

创建数据源

创建数据源

  1. 在“数据”菜单上单击“显示数据源”。

  2. 在“数据源”窗口中,选择“添加新数据源”,启动“数据源配置向导”。

  3. 在“选择数据源类型”页面上选择“数据库”,然后单击“下一步”。

  4. 在“选择数据连接”页面上,执行以下操作之一:

    • 如果下拉列表中包含到 Northwind 示例数据库的数据连接,请选择该连接。

      - 或 -

    • 选择“新建连接”,以启动“添加/修改连接”对话框。有关更多信息,请参见“添加/修改连接”对话框(通用)

  5. 如果数据库需要密码并且已启用用于包括敏感数据的选项,请选择该选项并单击“下一步”。

  6. 在“将连接字符串保存到应用程序配置文件”页面上单击“下一步”。

  7. 在“选择数据库对象”页面上展开“表”节点。

  8. 选择“Customers”和“Orders”表,然后单击“完成”。

    “NorthwindDataSet”被添加到您的项目中,并且在“数据源”窗口中出现“Customers”和“Orders”表。

创建第一个窗体 (Form1)

通过将“Customers”节点从“数据源”窗口拖动到窗体上,可以创建数据绑定网格(DataGridView 控件)。

在窗体上创建数据绑定网格

创建第二个窗体 (Form2)

创建要传入数据的第二个窗体

  1. 从“项目”菜单,选择“添加 Windows 窗体”。

  2. 保留“Form2”的默认名称并单击“添加”。

  3. 将主“Orders”节点从“数据源”窗口拖到“Form2”上。

    在“Form2”上出现用于导航记录的 DataGridView 和工具栏 BindingNavigator。组件栏中出现 NorthwindDataSetCustomersTableAdapterBindingSourceBindingNavigator

  4. 从组件栏中删除“OrdersBindingNavigator”。

    “OrdersBindingNavigator”从“Form2”中消失。

向 Form2 添加 TableAdapter 查询来为 Form1 上所选择的客户加载订单

创建 TableAdapter 查询

  1. 在“解决方案资源管理器”中双击“NorthwindDataSet.xsd”文件。

  2. 右击“OrdersTableAdapter”并选择“添加查询”。

  3. 保留“使用 SQL 语句”的默认选项,然后单击“下一步”。

  4. 保留“选择(返回行)”的默认选项,然后单击“下一步”。

  5. 向查询添加 WHERE 子句来根据 CustomerID 返回 Orders。查询应当类似于:

    SELECT OrderID, CustomerID, EmployeeID, OrderDate, RequiredDate, ShippedDate, ShipVia, Freight, ShipName, ShipAddress, ShipCity, ShipRegion, ShipPostalCode, ShipCountry
    FROM Orders 
    WHERE CustomerID = @CustomerID
    
    说明:

    验证数据库的参数语法是否正确。例如,在 Microsoft Access 中,WHERE 子句应当如下:WHERE CustomerID = ?。

  6. 单击“下一步”。

  7. 对于“填充 DataTable”->“方法名称”,键入“FillByCustomerID”。

  8. 清除“返回 DataTable”选项,然后单击“下一步”。

  9. 单击“完成”。

在 Form2 上创建要传入数据的方法

创建要传入数据的方法

  1. 右击“Form2”并选择“查看代码”,以在“代码编辑器”中打开“Form2”。

  2. 用下面的代码替换自动添加到窗体的 Form2_Load 方法:

    Friend Sub LoadOrders(ByVal CustomerID As String)
        OrdersTableAdapter.FillByCustomerID(NorthwindDataSet.Orders, CustomerID)
    End Sub
    
    internal void LoadOrders(String CustomerID)
    {
        ordersTableAdapter.FillByCustomerID(northwindDataSet.Orders, CustomerID);
    }
    

在 Form1 上创建用于传递数据并显示 Form2 的方法

创建向 Form2 传递数据的方法

  1. 右击“Form1”并选择“查看代码”,以在“代码编辑器”中打开“Form1”。

  2. 将下面的代码添加到“Form1”的 Form1_Load 方法之下:

    Private Sub CustomersDataGridView_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) _
        Handles CustomersDataGridView.DoubleClick
    
        Dim SelectedRowView As Data.DataRowView
        Dim SelectedRow As NorthwindDataSet.CustomersRow
    
        SelectedRowView = CType(CustomersBindingSource.Current, System.Data.DataRowView)
        SelectedRow = CType(SelectedRowView.Row, NorthwindDataSet.CustomersRow)
    
        Dim OrdersForm As New Form2
        OrdersForm.LoadOrders(SelectedRow.CustomerID)
        OrdersForm.Show()
    End Sub
    
    private void customersDataGridView_DoubleClick(object sender, EventArgs e)
    {
        System.Data.DataRowView SelectedRowView;
        NorthwindDataSet.CustomersRow SelectedRow;
    
        SelectedRowView = (System.Data.DataRowView)customersBindingSource.Current;
        SelectedRow = (NorthwindDataSet.CustomersRow)SelectedRowView.Row;
    
        Form2 OrdersForm = new Form2();
        OrdersForm.LoadOrders(SelectedRow.CustomerID);
        OrdersForm.Show();
    }
    

运行应用程序

运行应用程序

  • 按 F5 运行应用程序。

  • 在“Form1”中双击一个客户记录以打开包含该客户的订单的“Form2”。

后续步骤

根据应用程序的要求,在窗体间传递数据之后可能还需要执行一些步骤。您可以通过以下操作来增强此演练的效果:

请参见

概念

“显示数据”概述

数据源概述

TableAdapter 概述

其他资源

数据演练

连接到 Visual Studio 中的数据

准备应用程序以接收数据

将数据获取到应用程序

在 Windows 应用程序中的窗体上显示数据

在应用程序中编辑数据

验证数据

保存数据