使用 Data Table 的 Data Relation






3.26/5 (21投票s)
本文演示了如何使用 ADO.NET 的数据关系与数据表,在内存中创建两个表之间的数据关系。
引言
ADO.NET 提供的功能远不止检索和提交数据。我们可以创建表的内存表示。这不受限制,我们可以定义这些表之间的父子关系。本文将展示如何使用 DataRelation
在两个 DataTable
之间显示基于主子关系的数据记录。
问题陈述
使用 DataTable
和 DataRelation
,根据所选类别显示产品。

Using the Code
重要的类如下:
System.Data.DataTable
System.Data.DataRelation
要理解数据关系,我们需要创建两个表,Category
和 Products
。
以下代码将创建 category
表:
Private Function CreateCategoryTable()
Dim obj_DataTable As New System.Data.DataTable("Category")
'Declaring the array of DataColum to hold the Primary Key Columns
Dim obj_PrimaryClmn(1) As System.Data.DataColumn
Dim obj_DataRow As System.Data.DataRow
obj_DataTable.Columns.Add(New System.Data.DataColumn("CategoryId"))
obj_DataTable.Columns.Add(New System.Data.DataColumn("CategoryName"))
obj_PrimaryClmn(0) = obj_DataTable.Columns(0)
'Assigning the CategoryId column as Primary Key
obj_DataTable.PrimaryKey = obj_PrimaryClmn
'Entering the data in Category Table
obj_DataRow = obj_DataTable.NewRow()
obj_DataRow.Item(0) = 0
obj_DataRow.Item(1) = "Select Category"
obj_DataTable.Rows.Add(obj_DataRow)
obj_DataRow = obj_DataTable.NewRow()
obj_DataRow.Item(0) = 1
obj_DataRow.Item(1) = "Computers"
obj_DataTable.Rows.Add(obj_DataRow)
obj_DataRow = obj_DataTable.NewRow()
obj_DataRow.Item(0) = 2
obj_DataRow.Item(1) = "Drinks"
obj_DataTable.Rows.Add(obj_DataRow)
obj_DataRow = obj_DataTable.NewRow()
obj_DataRow.Item(0) = 3
obj_DataRow.Item(1) = "Snacks"
obj_DataTable.Rows.Add(obj_DataRow)
obj_DataSet.Tables.Add(obj_DataTable)
End Function
Category
表有两个列。CategoryId
列是主列。这通过将主列数组添加到 Category DataTable
的主键属性来指定。
'Specifying the primary key of data table
obj_DataTable.PrimaryKey = obj_PrimaryClmn
Product
表包含属于特定类别的产品。每个 product
包含一个 categoryid
,用于指定该 product
的 Category
。
Private Function CreateProductTable()
Dim obj_DataRow As System.Data.DataRow
Dim obj_DataTable As New System.Data.DataTable("Product")
obj_DataTable.Columns.Add(New System.Data.DataColumn("ProductId"))
obj_DataTable.Columns.Add(New System.Data.DataColumn("ProductName"))
obj_DataTable.Columns.Add(New System.Data.DataColumn("CategoryId"))
obj_DataRow = obj_DataTable.NewRow()
obj_DataRow.Item(0) = 1
obj_DataRow.Item(1) = "PHP"
obj_DataRow.Item(2) = 1
obj_DataTable.Rows.Add(obj_DataRow)
obj_DataRow = obj_DataTable.NewRow()
obj_DataRow.Item(0) = 2
obj_DataRow.Item(1) = "Dew"
obj_DataRow.Item(2) = 2
obj_DataTable.Rows.Add(obj_DataRow)
obj_DataRow = obj_DataTable.NewRow()
obj_DataRow.Item(0) = 3
obj_DataRow.Item(1) = "ASP.Net"
obj_DataRow.Item(2) = 1
obj_DataTable.Rows.Add(obj_DataRow)
.......
End Function
Product
表的 CategoryId
列包含 product
所属的 Category
的 ID。
'Tables are added in a Dataset
obj_DataSet.Tables.Add(obj_DataTable)
现在,在 Category
和 Product
表之间创建数据关系:
Private Sub CreateDataRelation()
Dim obj_ParentClmn, obj_ChildClmn As DataColumn
'Get the reference of columns to create a relation between.
obj_ParentClmn = obj_DataSet.Tables("Category").Columns("CategoryId")
obj_ChildClmn = obj_DataSet.Tables("Product").Columns("CategoryId")
'Creates a relation object, Parameters required are
'New Relation Name, Object of Parent & Child column respectively.
obj_DataRelation = New DataRelation("relation_Category_Product", _
obj_ParentClmn, obj_ChildClmn)
'Adding Relation to the dataset that holds the tables.
obj_DataSet.Relations.Add(obj_DataRelation)
End Sub
DataRelation
对象用于创建两个表之间的数据关系。要创建关系,关系名称、Parent
和 Child
列的对象将传递给 DataRelation
的构造函数。
之后,此关系将添加到包含两个表的 dataset
中。
obj_DataSet.Relations.Add(obj_DataRelation)
现在,要根据所选父行获取子行,我们使用 Getchildrows()
方法:
obj_ChildRows = obj_ParentRow.GetChildRows("relation_Category_Product")
Getchildrows()
方法返回 Product
表的子行集合。
关注点
与 Getchildrows()
类似,我们可以使用 Getparentrows()
和 Getparentrow()
来获取父行。坦率地说,Getchildrows()
方法可以以多种方式使用。这取决于应用程序的架构。
[感谢:.NET Geek]
历史
- 2007 年 4 月 7 日:初始发布