| 网站首页 | 硬件维修 | 应用学院 | 网络组建 | 网站制作 | 菜鸟黑客 | 编程之道 | 数码大全 | 娱乐休闲 | 软件下载 | 在线视频 | 请您留言 | 技术论坛 | 
专 题 栏 目
最 新 热 门
最 新 推 荐
相 关 文 章
  • ASP.NET中在线用户统计

  • 用ASP.NET开发Web服务的五则…

  • 带你走进ASP.NET(4)

  • 带你走进ASP.NET(3)

  • 带你走进ASP.NET(2)

  • 带你走进ASP.NET(1)

  • 在 ADO.NET 数据集中浏览多个…

  • 在 ADO.NET 数据集中浏览多个…

  • 在 ADO.NET 数据集中浏览多个…

  • 在 ADO.NET 数据集中浏览多个…

  • Q
    您现在的位置: 我是IT人 >> 编程之道 >> .NET >> 编程文章正文
    [图文]在 ADO.NET 数据集中浏览多个相关表(5)       
    在 ADO.NET 数据集中浏览多个相关表(5)
    作者:小秦 文章来源:转载 点击数: 更新时间:2005-3-13
    [ 字体:缩小 正常 放大 | 双击自动滚屏 ]
    请选择合适的字体颜色:
     创建关系
      
      在 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() + "\n";
      }
      details += "\n";
      }
      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"]
      + "\n";
      
      
      
      保存项目。
      运行应用程序。
      在列表框中选择一个订单,
      RTF 文本框中将显示产品名称和详细信息。现在窗体中显示来自所有四个表的相关数据。
      
      
      
      图 2:显示产品名称和订单明细的窗体
      
      在列表框中选择另一个订单。RTF 文本框中的订单明细将被更新。
      关闭窗体。
    编程文章录入:小秦    责任编辑:小秦 
  • 上一篇编程文章:

  • 下一篇编程文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 关于我们 | 友情链接 | 版权申明 |