在 ADO.NET 数据集中浏览多个相关表(5)
点击次数:16 次 发布日期:2008-11-26 15:25:38 作者:源代码网
|
源代码网推荐 创建关系 源代码网推荐 源代码网推荐 在 Solution Explorer(解决方案资源管理器)中,双击 dsNorthwind.xsd 文件。文件将在 XML Designer(XML 设计器)中打开。 源代码网推荐 从工具栏的 XML Schema(XML 架构)选项卡中,将 Relation(关系)拖到订单表上。 源代码网推荐 在 Edit Relation(编辑关系)对话框中,设置以下属性: 源代码网推荐 源代码网推荐 元素 设置 源代码网推荐 Name CustomersOrders 源代码网推荐 Parent Customers 源代码网推荐 Child Orders 源代码网推荐 Key Fields CustomerID 源代码网推荐 Foreign Key Fields CustomerID 源代码网推荐 源代码网推荐 源代码网推荐 单击 OK(确定)以创建关系并关闭对话框。 源代码网推荐 从工具栏的 XML Schema(XML 架构)选项卡中,将 Relation(关系)拖到订单明细表上。 源代码网推荐 在 Edit Relation(编辑关系)对话框中,设置以下属性: 源代码网推荐 源代码网推荐 元素 设置 源代码网推荐 Name OrdersOrderDetails 源代码网推荐 Parent Orders 源代码网推荐 Child OrderDetails 源代码网推荐 Key Fields OrderID 源代码网推荐 Foreign Key Fields OrderID 源代码网推荐 源代码网推荐 源代码网推荐 单击 OK(确定)以创建关系并关闭对话框。 源代码网推荐 从工具栏的 XML Schema(XML 架构)选项卡中,将 Relation(关系)拖到订单明细表上。 源代码网推荐 在 Edit Relation(编辑关系)对话框中,设置以下属性: 源代码网推荐 源代码网推荐 元素 设置 源代码网推荐 Name ProductsOrderDetails 源代码网推荐 Parent Products 源代码网推荐 Child OrderDetails 源代码网推荐 Key Fields ProductID 源代码网推荐 Foreign Key Fields ProductID 源代码网推荐 源代码网推荐 源代码网推荐 单击 OK(确定)以创建关系并关闭对话框。 源代码网推荐 保存项目。 源代码网推荐 订单明细表和产品表已被添加到数据集中,但是您仍需要添加代码,以便在运行时用数据来填充它们。 源代码网推荐 源代码网推荐 用数据填充表 源代码网推荐 源代码网推荐 在 Solution Explorer(解决方案资源管理器)中,右键单击 Form1 并从快捷菜单中选择 View Code(查看代码)。 源代码网推荐 在 Form1_Load 事件处理程序中,将以下代码添加到注释“用数据填充表”与 daOrders.Fill(dsNorthwind1) 行之间: 源代码网推荐 源代码网推荐 " Visual Basic 源代码网推荐 daOrderDetails.Fill(dsNorthwind1) 源代码网推荐 daProducts.Fill(dsNorthwind1) 源代码网推荐 // C# 源代码网推荐 daOrderDetails.Fill(dsNorthwind1); 源代码网推荐 daProducts.Fill(dsNorthwind1); 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 用数据填充 RTF 文本框 源代码网推荐 现在您要为项目添加代码,以便在列表框中选定某个订单时,可以在 RTF 文本框中显示所有订单明细。 源代码网推荐 源代码网推荐 以下代码将基于列表框中的选定订单调用 GetChildRows 方法。订单明细表中的所有相关记录都将分配给名为 draOrderDetails 的数据行数组。每个数据行的内容将显示在 RTF 文本框中。 源代码网推荐 源代码网推荐 注意:请注意嵌套的 For Each 循环是如何首先选取一个数据行,然后在该数据行的所有列中循环以访问整个相关记录的。 源代码网推荐 设置 RTF 文本框以显示所有订单明细 源代码网推荐 源代码网推荐 在 Solution Explorer(解决方案资源管理器)中,右键单击 Form1 并从快捷菜单中选择 View Designer(视图设计器)。 源代码网推荐 双击列表框为列表框 lbOrders 的 SelectedIndexChanged 事件创建事件处理程序。 源代码网推荐 添加以下代码: 源代码网推荐 源代码网推荐 " Visual Basic 源代码网推荐 Private Sub lbOrders_SelectedIndexChanged _ 源代码网推荐 (ByVal sender As System.Object, ByVal e As System.EventArgs) _ 源代码网推荐 Handles lbOrders.SelectedIndexChanged 源代码网推荐 " 选择新订单时,清除 RTF 文本框。 源代码网推荐 rtbDetails.Clear() 源代码网推荐 " 声明一个用来保存选定的订单 ID 的整数。 源代码网推荐 Dim SelectedOrderID As Integer 源代码网推荐 " 将选定的项目设置为整数。 源代码网推荐 SelectedOrderID = CType(lbOrders.SelectedItem, Integer) 源代码网推荐 源代码网推荐 " 声明一个用来保存选定订单的记录的数据行。 源代码网推荐 Dim drSelectedOrder As DataRow 源代码网推荐 drSelectedOrder = _ 源代码网推荐 DsNorthwind1.Orders.FindByOrderID(SelectedOrderID) 源代码网推荐 源代码网推荐 " 声明一个用来保存相关记录的数据行数组。 源代码网推荐 Dim draOrderDetails() As DataRow 源代码网推荐 draOrderDetails = _ 源代码网推荐 drSelectedOrder.GetChildRows("OrdersOrderDetails") 源代码网推荐 源代码网推荐 Dim details As String = "" 源代码网推荐 Dim drDetails As DataRow 源代码网推荐 Dim dcDetails As DataColumn 源代码网推荐 For Each drDetails In draOrderDetails 源代码网推荐 For Each dcDetails In drDetails.Table.Columns 源代码网推荐 details &= dcDetails.ColumnName & ": " 源代码网推荐 details &= drDetails(dcDetails).ToString() 源代码网推荐 details &= ControlChars.CrLf 源代码网推荐 Next 源代码网推荐 details &= ControlChars.CrLf 源代码网推荐 Next 源代码网推荐 rtbDetails.Text = details 源代码网推荐 End Sub 源代码网推荐 源代码网推荐 // C# 源代码网推荐 private void lbOrders_SelectedIndexChanged 源代码网推荐 (object sender, System.EventArgs e) 源代码网推荐 { 源代码网推荐 // 选择新订单时,清除 RTF 文本框。 源代码网推荐 rtbDetails.Clear(); 源代码网推荐 源代码网推荐 // 声明一个用来保存选定的订单 ID 的整数。 源代码网推荐 int SelectedOrderID; 源代码网推荐 // 将选定的项目设置为整数。 源代码网推荐 SelectedOrderID = (int)lbOrders.SelectedItem; 源代码网推荐 源代码网推荐 // 声明一个用来保存选定订单的记录的数据行。 源代码网推荐 DataRow drSelectedOrder; 源代码网推荐 drSelectedOrder = 源代码网推荐 dsNorthwind1.Orders.FindByOrderID(SelectedOrderID); 源代码网推荐 源代码网推荐 // 声明一个用来保存相关记录的数据行数组。 源代码网推荐 DataRow[] draOrderDetails; 源代码网推荐 draOrderDetails = 源代码网推荐 drSelectedOrder.GetChildRows("OrdersOrderDetails"); 源代码网推荐 源代码网推荐 string details = ""; 源代码网推荐 foreach(DataRow drDetails in draOrderDetails) 源代码网推荐 { 源代码网推荐 foreach(DataColumn dcDetails in drDetails.Table.Columns) 源代码网推荐 { 源代码网推荐 details += dcDetails.ColumnName + ": "; 源代码网推荐 details += drDetails[dcDetails].ToString() + " "; 源代码网推荐 } 源代码网推荐 details += " "; 源代码网推荐 } 源代码网推荐 rtbDetails.Text = details; 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 保存项目。 源代码网推荐 运行应用程序。 源代码网推荐 在列表框中选择一个订单,其订单明细将显示在 RTF 文本框中。 源代码网推荐 在列表框中选择另一个订单。RTF 文本框中的订单明细将被更新。 源代码网推荐 浏览多对多关系 源代码网推荐 构成多对多关系的表通常通过保证数据完整性的第三方表进行连接。在罗斯文数据库中,订单表和产品表就是这样相关的。因为有些订单可能包含很多产品,而有些产品又在很多订单中销售。这两个表是通过订单明细表连接的,订单明细表利用这两个表中的列建立自己特定的列,并使这些数据相关。浏览构成多对多关系的三个表与处理一对多关系的表并没有太大区别。 源代码网推荐 源代码网推荐 要浏览多对多关系,您可以基于订单明细表中的单个记录来访问产品,这将返回产品名称并显示在订单明细中。 源代码网推荐 源代码网推荐 您可以使用 GetParentRow 方法从产品表中访问产品名称。调用 GetParentRow 方法将返回单个数据行,而调用 GetChildRows 方法将返回数据行数组(如上例所示)。 源代码网推荐 源代码网推荐 从订单明细记录中获取产品名称 源代码网推荐 源代码网推荐 在 Solution Explorer(解决方案资源管理器)中,右键单击 Form1 并从快捷菜单中选择 View Code(查看代码)。 源代码网推荐 在列表框 (lbOrders) 的 SelectedIndexChanged 事件处理程序中,将以下代码添加到 For Each 行之间: 源代码网推荐 源代码网推荐 " Visual Basic 源代码网推荐 details &= "产品名称: " & _ 源代码网推荐 CType(drDetails.GetParentRow("ProductsOrderDetails") _ 源代码网推荐 ("ProductName"), String) & ControlChars.CrLf 源代码网推荐 // C# 源代码网推荐 details += "产品名称: " + 源代码网推荐 drDetails.GetParentRow("ProductsOrderDetails")["ProductName"] 源代码网推荐 + " "; 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 保存项目。 源代码网推荐 运行应用程序。 源代码网推荐 在列表框中选择一个订单, 源代码网推荐 RTF 文本框中将显示产品名称和详细信息。现在窗体中显示来自所有四个表的相关数据。 源代码网推荐 源代码网推荐
源代码网推荐 源代码网推荐 图 2:显示产品名称和订单明细的窗体 源代码网推荐 源代码网推荐 在列表框中选择另一个订单。RTF 文本框中的订单明细将被更新。 源代码网推荐 关闭窗体。 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
