演练:在 Windows 窗体间传递数据
更新:2011 年 3 月
本演练提供分步说明,介绍如何将数据从一个窗体传递到另一个窗体。 通过使用来自 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”**的 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”中,右击“Customer”数据网格,然后单击“属性”**。
在**“属性”窗口中,单击“事件”**。
双击**“CellDoubleClick”**事件。
将显示代码编辑器。
更新方法定义以匹配下面的示例:
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 窗体控件绑定到数据
其他资源
修订记录
日期 |
修订记录 |
原因 |
---|---|---|
2011 年 3 月 |
消除了示例代码中的错误。 |
客户反馈 |