在ADO.NET数据集中浏览多个相关表(5)

在ADO.NET数据集中浏览多个相关表(5)


  创建关系
 
  在 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 事件创建事件处理程序。
  添加以下代码:

Code


保存项目。
  运行应用程序。
  在列表框中选择一个订单,其订单明细将显示在 RTF 文本框中。
  在列表框中选择另一个订单。RTF 文本框中的订单明细将被更新。
  浏览多对多关系
  构成多对多关系的表通常通过保证数据完整性的第三方表进行连接。在罗斯文数据库中,订单表和产品表就是这样相关的。因为有些订单可能包含很多产品,而有些产品又在很多订单中销售。这两个表是通过订单明细表连接的,订单明细表利用这两个表中的列建立自己特定的列,并使这些数据相关。浏览构成多对多关系的三个表与处理一对多关系的表并没有太大区别。
 
  要浏览多对多关系,您可以基于订单明细表中的单个记录来访问产品,这将返回产品名称并显示在订单明细中。
 
  您可以使用 GetParentRow 方法从产品表中访问产品名称。调用 GetParentRow 方法将返回单个数据行,而调用 GetChildRows 方法将返回数据行数组(如上例所示)。
 
  从订单明细记录中获取产品名称
 
  在 Solution Explorer(解决方案资源管理器)中,右键单击 Form1 并从快捷菜单中选择 View Code(查看代码)。
  在列表框 (lbOrders) 的 SelectedIndexChanged 事件处理程序中,将以下代码添加到 For Each 行之间:

Code


保存项目。
  运行应用程序。
  在列表框中选择一个订单,
  RTF 文本框中将显示产品名称和详细信息。现在窗体中显示来自所有四个表的相关数据。
 
 


 
  图 2:显示产品名称和订单明细的窗体
 
  在列表框中选择另一个订单。RTF 文本框中的订单明细将被更新。
  关闭窗体。

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [ADO.Net] 的这些文章也感兴趣:

C#数据库事务原理及实践(下)
用VisualC#来修改和删除数据库记录
ADO.NET实体框架已经准备好面向企业级应用了吗?
亲密接触ADO.NET2.0
在ADO.NET数据集中浏览多个相关表(3)
Using ADO.NET Data Service – Consuming
C#数据库事务原理及实践(上)
Synchronization Services for ADO.NET(1) - 创建一个简单的数据同步小程序
支持实体框架的首批ADO.NET Provider已经准备就绪
使用SqlDataReader读取数据示例