DataTable.ChildRelations Property
Gets the collection of child relations for this DataTable.
Assembly: System.Data (in System.Data.dll)
<BrowsableAttribute(False)> Public ReadOnly Property ChildRelations As DataRelationCollection
Property Value
Type: System.Data.DataRelationCollectionA DataRelationCollection that contains the child relations for the table. An empty collection is returned if no DataRelation objects exist.
A DataRelation defines the relationship between two tables. Typically, two tables are linked through a single field that contains the same data. For example, a table which contains address data may have a single field containing codes that represent countries/regions. A second table that contains country/region data will have a single field that contains the code that identifies the country/region, and it is this code which is inserted into the corresponding field in the first table. A DataRelation, then, contains at least four pieces of information: (1) the name of the first table, (2) the column name in the first table, (3) the name of the second table, and (4) the column name in the second table.
The following example uses the ChildRelations property to return each child DataRelation in a DataTable. Each relation is then used as an argument in the GetChildRows method of the DataRow to return an array of rows. The value of each column in the row is then printed.
Public Sub GetChildRowsFromDataRelation() ' For each row in the table, get the child rows using the ' ChildRelations. For each item in the array, print the value ' of each column. Dim table As DataTable = CreateDataSet().Tables("Customers") Dim childRows() As DataRow Dim relation as DataRelation Dim row as DataRow For Each relation In table.ChildRelations For Each row In table.Rows PrintRowValues(new DataRow() {row}, "Parent Row") childRows = row.GetChildRows(relation) ' Print values of rows. PrintRowValues(childRows, "child rows") Next row Next relation End Sub Public Function CreateDataSet() As DataSet ' create a DataSet with one table, two columns Dim dataSet As DataSet dataSet = new DataSet() ' create Customer table Dim table As DataTable table = new DataTable("Customers") dataSet.Tables.Add(table) table.Columns.Add("customerId", _ GetType(Integer)).AutoIncrement = true table.Columns.Add("name", GetType(String)) table.PrimaryKey = new DataColumn() _ { table.Columns("customerId") } ' create Orders table table = new DataTable("Orders") dataSet.Tables.Add(table) table.Columns.Add("orderId", GetType(Integer)).AutoIncrement = true table.Columns.Add("customerId", GetType(Integer)) table.Columns.Add("amount", GetType(Double)) table.PrimaryKey = new DataColumn() { table.Columns("orderId") } ' create relation dataSet.Relations.Add(dataSet.Tables("Customers").Columns("customerId"), _ dataSet.Tables("Orders").Columns("customerId")) ' populate the tables Dim orderId As Integer = 1 Dim customerId As Integer Dim i As Integer For customerId = 1 To 10 ' add customer record dataSet.Tables("Customers").Rows.Add( _ new object() { customerId, _ string.Format("customer{0}", customerId) }) ' add 5 order records for each customer For i = 1 To 5 dataSet.Tables("Orders").Rows.Add( _ new object() { orderId, customerId, orderId * 10 }) orderId = orderId+1 Next Next CreateDataSet = dataSet End Function private sub PrintRowValues(rows() As DataRow, label As String) Console.WriteLine("\n{0}", label) If rows.Length <= 0 Console.WriteLine("no rows found") Exit Sub End If Dim row As DataRow Dim column As DataColumn For Each row In rows For Each column In row.Table.Columns Console.Write("\table {0}", row(column)) Next column Console.WriteLine() Next row End Sub
Available since 1.1