65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Data Table 的 Data Relation

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.26/5 (21投票s)

2007年4月7日

CPOL

2分钟阅读

viewsIcon

155186

downloadIcon

1959

本文演示了如何使用 ADO.NET 的数据关系与数据表,在内存中创建两个表之间的数据关系。

引言

ADO.NET 提供的功能远不止检索和提交数据。我们可以创建表的内存表示。这不受限制,我们可以定义这些表之间的父子关系。本文将展示如何使用 DataRelation 在两个 DataTable 之间显示基于主子关系的数据记录。

问题陈述

使用 DataTableDataRelation,根据所选类别显示产品。

Screenshot - snap1.png

Using the Code

重要的类如下:

  • System.Data.DataTable
  • System.Data.DataRelation

要理解数据关系,我们需要创建两个表,CategoryProducts

以下代码将创建 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,用于指定该 productCategory

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)  

现在,在 CategoryProduct 表之间创建数据关系:

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 对象用于创建两个表之间的数据关系。要创建关系,关系名称、ParentChild 列的对象将传递给 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 日:初始发布
© . All rights reserved.