日期:2012-06-08  浏览次数:20387 次

创建关系
  
  在 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 &= ControlCh