DataTable.ChildRelations プロパティ
アセンブリ: System.Data (system.data.dll 内)

テーブルの子リレーションを格納している DataRelationCollection。DataRelation オブジェクトが存在しない場合、空のコレクションが返されます。

DataRelation は 2 つのテーブル間のリレーションシップを定義します。通常、2 つのテーブルは、同じデータが格納されている単一のフィールドでリンクされています。たとえば、住所データが格納されているテーブルに、国や地域を表すコードが格納されている単一のフィールドがあるとします。国や地域のデータが格納されている 2 つ目のテーブルに、国や地域を識別するコードが格納されている単一のフィールドがあります。最初のテーブルの対応するフィールドに格納されているのがこのコードです。したがって、DataRelation には、少なくとも (1) 最初のテーブルの名前、(2) 最初のテーブル内の列名、(3) 2 つ目のテーブルの名前、(4) 2 つ目のテーブル内の列名、という 4 種類の情報が格納されています。

ChildRelations プロパティを使用して、DataTable 内の各子 DataRelation を返す例を次に示します。次に、DataRow の GetChildRows メソッドで各リレーションシップを引数として使用して、行の配列を返します。次に、行の各列の値が出力されます。
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
private static void 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. */ DataTable table = CreateDataSet().Tables["Customers"]; DataRow[] childRows; foreach(DataRelation relation in table.ChildRelations) { foreach(DataRow row in table.Rows) { PrintRowValues(new DataRow[] {row}, "Parent Row"); childRows = row.GetChildRows(relation); // Print values of rows. PrintRowValues(childRows, "child rows"); } } } public static DataSet CreateDataSet() { // create a DataSet with one table, two columns DataSet dataSet = new DataSet(); // create Customer table DataTable table = new DataTable("Customers"); dataSet.Tables.Add(table); table.Columns.Add("customerId", typeof(int)).AutoIncrement = true; table.Columns.Add("name", typeof(string)); table.PrimaryKey = new DataColumn[] { table.Columns["customerId"] }; // create Orders table table = new DataTable("Orders"); dataSet.Tables.Add(table); table.Columns.Add("orderId", typeof(int)).AutoIncrement = true; table.Columns.Add("customerId", typeof(int)); table.Columns.Add("amount", typeof(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 int orderId = 1; for(int customerId=1; customerId<=10; customerId++) { // add customer record dataSet.Tables["Customers"].Rows.Add( new object[] { customerId, string.Format("customer{0}", customerId) }); // add 5 order records for each customer for(int i=1; i<=5; i++) { dataSet.Tables["Orders"].Rows.Add( new object[] { orderId++, customerId, orderId * 10 }); } } return dataSet; } private static void PrintRowValues(DataRow[] rows, string label) { Console.WriteLine("\n{0}", label); if(rows.Length <= 0) { Console.WriteLine("no rows found"); return; } foreach(DataRow row in rows) { foreach(DataColumn column in row.Table.Columns) { Console.Write("\table {0}", row[column]); } Console.WriteLine(); } }

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Weblioに収録されているすべての辞書からDataTable.ChildRelations プロパティを検索する場合は、下記のリンクをクリックしてください。

- DataTable.ChildRelations プロパティのページへのリンク