How to Retrieving Parent and Child DataTable Records

It's easy to retrieve data that capitalizes on relationship after establishing a parent-child relationship between two tables in a DataSet. The DataRow class includes two methods— GetChildRows and GetParentRow—that retrieve the relevant row(s) at the other end of a linked relationship. Because a column could be involved in multiple relationships, you must pass either the name or the instance of the relationship to the relevant method.

Following code sample shows working of GetParentRow method

Dim objDtOrder As DataTable = DataSet1.Tables("Order")

Dim objRelation As DataRelation = thisTable.ParentRelations(0)

Dim parentRow As DataRow

Dim row As DataRow

For Each row In objDtOrder.Rows

parentRow = row.GetParentRow(objRelation)

Console.Write(ControlChars.Tab & " child row: " _

& row(1).ToString())

Console.Write(ControlChars.Tab & " parent row: " _

& parentRow(1).ToString() & ControlChars.Cr)

Next row

Following code sample shows working of GetChildRows method

Dim myRelation As DataRelation

Dim arrRows() As DataRow

Dim myRow As DataRow

Dim i As Integer

Dim myColumn As DataColumn

For Each myRelation In myTable.ChildRelations

For Each myRow In myTable.Rows

arrRows = myRow.GetChildRows(myRelation)

For i = 0 To arrRows.GetUpperBound(0)

For Each myColumn In myTable.Columns

Console.WriteLine(arrRows(i)(myColumn))

Next myColumn

Next i

Next myRow

Next myRelation

The DataRow class also includes a method named GetParentRows that returns multiple parent rows for a single child record. This is useful for parent-child relationships that are linked on columns other than the parent's primary key.

Following code sample shows working of GetParentRows method

Dim objRelation As DataRelation

Dim arrRows() As DataRow

Dim objRow As DataRow

Dim i As Integer

Dim objColumn As DataColumn

For Each objRelation In objTable.ParentRelations

For Each objRow In objTable.Rows

arrRows = objRow.GetParentRows(objRelation)

' Print values of rows.

For i = 0 To arrRows.GetUpperBound(0)

For Each objColumn In objTable.Columns

Console.WriteLine(arrRows(i)(objColumn.ColumnName))

Next objColumn

Next i

Next objRow

Next objRelation