演练:在 Windows 应用程序的不同窗体间传递数据
更新:2007 年 11 月
本演练提供分步说明,介绍如何将数据从一个窗体传递到另一个窗体。通过使用来自 Northwind 的客户和订单表,一个窗体允许用户选择客户,而另一个窗体会显示所选择客户的订单。本演练演示如何在窗体上创建从第一个窗体接收数据的方法。
说明: |
---|
此演练仅演示在窗体之间传递数据的一种方法。向窗体传递数据还可以有其他选择,包括以下方法:创建另一个构造函数来接收数据,或者创建一个可用第一个窗体的数据进行设置的公共属性。 |
本演练演示如下任务:
创建新的“Windows 应用程序”项目。
使用数据源配置向导创建并配置数据集。
选择从“数据源”窗口拖动某些项时要在窗体上创建的控件。有关更多信息,请参见如何:设置从“数据源”窗口中拖动时要创建的控件。
通过将某些项从“数据源”窗口拖到窗体上来创建数据绑定控件。
创建具有网格的第二个窗体来显示数据。
创建一个 TableAdapter 查询来获取特定客户的订单。
在窗体间传递数据。
先决条件
若要完成本演练,您需要:
- 对 Northwind 示例数据库的访问权。有关更多信息,请参见如何:安装示例数据库。
创建 Windows 应用程序
创建新的 Windows 项目
从“文件”菜单创建一个新的项目。
将项目命名为 PassingDataBetweenForms。
选择“Windows 应用程序”,然后单击“确定”。有关更多信息,请参见创建基于 Windows 的应用程序。
“PassingDataBetweenForms”项目即被创建并添加到“解决方案资源管理器”中。
创建数据源
创建数据源
在“数据”菜单上单击“显示数据源”。
在“数据源”窗口中,选择“添加新数据源”,启动“数据源配置向导”。
在“选择数据源类型”页面上选择“数据库”,然后单击“下一步”。
在“选择数据连接”页面上,执行以下操作之一:
如果下拉列表中包含到 Northwind 示例数据库的数据连接,请选择该连接。
- 或 -
选择“新建连接”,以启动“添加/修改连接”对话框。有关更多信息,请参见“添加/修改连接”对话框(通用)。
如果数据库需要密码并且已启用用于包括敏感数据的选项,请选择该选项并单击“下一步”。
在“将连接字符串保存到应用程序配置文件”页面上单击“下一步”。
在“选择数据库对象”页面上展开“表”节点。
选择“Customers”和“Orders”表,然后单击“完成”。
“NorthwindDataSet”被添加到您的项目中,并且在“数据源”窗口中出现“Customers”和“Orders”表。
创建第一个窗体 (Form1)
通过将“Customers”节点从“数据源”窗口拖动到窗体上,可以创建数据绑定网格(DataGridView 控件)。
在窗体上创建数据绑定网格
将主“Customers”节点从“数据源”窗口拖到“Form1”上。
在“Form1”上出现用于导航记录的 DataGridView 和工具栏 BindingNavigator。组件栏中出现 NorthwindDataSet、CustomersTableAdapter、BindingSource 和 BindingNavigator。
创建第二个窗体 (Form2)
创建要传入数据的第二个窗体
从“项目”菜单,选择“添加 Windows 窗体”。
保留“Form2”的默认名称并单击“添加”。
将主“Orders”节点从“数据源”窗口拖到“Form2”上。
在“Form2”上出现用于导航记录的 DataGridView 和工具栏 BindingNavigator。组件栏中出现 NorthwindDataSet、CustomersTableAdapter、BindingSource 和 BindingNavigator。
从组件栏中删除“OrdersBindingNavigator”。
“OrdersBindingNavigator”从“Form2”中消失。
向 Form2 添加 TableAdapter 查询来为 Form1 上所选择的客户加载订单
创建 TableAdapter 查询
在“解决方案资源管理器”中双击“NorthwindDataSet.xsd”文件。
右击“OrdersTableAdapter”并选择“添加查询”。
保留“使用 SQL 语句”的默认选项,然后单击“下一步”。
保留“选择(返回行)”的默认选项,然后单击“下一步”。
向查询添加 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 = ?。
单击“下一步”。
对于“填充 DataTable”->“方法名称”,键入“FillByCustomerID”。
清除“返回 DataTable”选项,然后单击“下一步”。
单击“完成”。
在 Form2 上创建要传入数据的方法
创建要传入数据的方法
右击“Form2”并选择“查看代码”,以在“代码编辑器”中打开“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 传递数据的方法
右击“Form1”并选择“查看代码”,以在“代码编辑器”中打开“Form1”。
将下面的代码添加到“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”。
后续步骤
根据应用程序的要求,在窗体间传递数据之后可能还需要执行一些步骤。您可以通过以下操作来增强此演练的效果:
编辑数据集,以添加或移除数据库对象。有关更多信息,请参见如何:编辑数据集。
添加将数据保存回数据库的功能。有关更多信息,请参见如何:将数据集更改保存到数据库中。