演练:在 Windows 窗体间传递数据

更新:2011 年 3 月

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

提示

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

本演练涉及以下任务:

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

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

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

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

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

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

  • 在窗体间传递数据。

系统必备

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

创建 Windows 应用程序

创建新的 Windows 项目

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

  2. 将项目命名为 PassingDataBetweenForms。

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

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

创建数据源

创建数据源

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

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

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

  4. 在**“选择数据库模型”页上,确认已指定“数据集”,然后单击“下一步”**。

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

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

      - 或 -

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

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

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

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

  9. 选择**“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”**的 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”中,右击“Customer”数据网格,然后单击“属性”**。

  2. 在**“属性”窗口中,单击“事件”**。

  3. 双击**“CellDoubleClick”**事件。

    将显示代码编辑器。

  4. 更新方法定义以匹配下面的示例:

    Private Sub CustomersDataGridView_DoubleClick() 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”**。

后续步骤

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

请参见

概念

在 Visual Studio 中将 Windows 窗体控件绑定到数据

数据源概述

TableAdapter 概述

在 Visual Studio 中将控件绑定到数据

其他资源

数据演练

连接到 Visual Studio 中的数据

准备应用程序以接收数据

将数据获取到应用程序

在应用程序中编辑数据

验证数据

保存数据

修订记录

日期

修订记录

原因

2011 年 3 月

消除了示例代码中的错误。

客户反馈