上一篇 | 下一篇

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

发布: 2008-6-29 23:20 | 作者: admin | 来源: | 查看: 3次

>

创建关系

在 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 事件处理程序中,将以下代码添加到注释“用数据填充表”与 daOrd

ers.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 & ":

字号: | 推荐给好友

21/212>

评分:0

我来说两句