Introduction
ADO.NET provides much more than just retrieving and submitting data. We can create in-memory representation of tables. This is not limited; we can define the Parent and Child relation between those tables. This article will show how to use DataRelation between two DataTables to show the records on the basis of Master Child relationship.
Problem Statement
To display the product on the basis of a selected category using a DataTable and DataRelation.
Using the Code
The important classes are as follows:
System.Data.DataTable
System.Data.DataRelation
To understand the data relation we need to create two tables, Category and Products.
The code below will create the category table:
Private Function CreateCategoryTable()
Dim obj_DataTable As New System.Data.DataTable("Category")
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)
obj_DataTable.PrimaryKey = obj_PrimaryClmn
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
The Category table has two columns. CategoryId column is the primary column. This is specified by adding the array of primary columns to the primary key property of Category DataTable.
obj_DataTable.PrimaryKey = obj_PrimaryClmn
The Product table contains the products that fall under a specific category. Each product contains a categoryid that specifies the Category for this product.
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
The CategoryId column of Product table contains the id of Category under in which the product falls.
obj_DataSet.Tables.Add(obj_DataTable)
Now create a data relation between Category and Product tables:
Private Sub CreateDataRelation()
Dim obj_ParentClmn, obj_ChildClmn As DataColumn
obj_ParentClmn = obj_DataSet.Tables("Category").Columns("CategoryId")
obj_ChildClmn = obj_DataSet.Tables("Product").Columns("CategoryId")
obj_DataRelation = New DataRelation("relation_Category_Product", _
obj_ParentClmn, obj_ChildClmn)
obj_DataSet.Relations.Add(obj_DataRelation)
End Sub
The DataRelation object is used to create a data relation between the two tables. To create a relation – relation name, object of Parent & Child columns are passed to the constructor of DataRelation.
Later, this relation is added to the dataset that contains both the tables.
obj_DataSet.Relations.Add(obj_DataRelation)
Now to fetch the child rows on the basis of the selected parent row, we use the Getchildrows() method:
obj_ChildRows = obj_ParentRow.GetChildRows("relation_Category_Product")
The Getchildrows() method returns the collection of child rows of the Product table.
Points of Interest
Like Getchildrows(), we can use Getparentrows() and Getparentrow() to fetch the parent row(s). Honestly speaking, the Getchildrows() method can be used in a number of ways. This depends on the architecture of your application.
[Courtesy: .NET Geek]
History
- 7th April, 2007: Initial post