다음을 통해 공유


DataTable.ChildRelations 속성

DataTable에 대한 자식 관계 컬렉션을 가져옵니다.

네임스페이스: System.Data
어셈블리: System.Data(system.data.dll)

구문

‘선언
Public ReadOnly Property ChildRelations As DataRelationCollection
‘사용 방법
Dim instance As DataTable
Dim value As DataRelationCollection

value = instance.ChildRelations
public DataRelationCollection ChildRelations { get; }
public:
property DataRelationCollection^ ChildRelations {
    DataRelationCollection^ get ();
}
/** @property */
public DataRelationCollection get_ChildRelations ()
public function get ChildRelations () : DataRelationCollection

속성 값

테이블의 자식 관계가 포함된 DataRelationCollection입니다. DataRelation 개체가 없으면 빈 컬렉션이 반환됩니다.

설명

DataRelation은 두 테이블 간의 관계를 정의합니다. 일반적으로 두 테이블은 같은 데이터가 들어 있는 단일 필드를 통해 연결됩니다. 예를 들어, 주소 데이터가 들어 있는 테이블에는 국가/지역을 나타내는 코드가 포함된 단일 필드가 있을 수 있습니다. 또한 국가/지역 데이터가 있는 둘째 테이블에 국가/지역을 식별하는 코드가 포함된 단일 필드가 있으며 이 코드가 첫째 테이블의 해당 필드에 삽입되는 것으로 가정합니다. 그러면 DataRelation에는 적어도 (1)첫째 테이블 이름, (2)첫째 테이블에 있는 열 이름, (3)둘째 테이블 이름, (4)둘째 테이블에 있는 열 이름과 같은 네 가지 정보가 포함됩니다.

예제

다음 예제에서는 ChildRelations 속성을 사용하여 DataTable의 각 자식 DataRelation을 반환합니다. 그러면 각 관계는 DataRowGetChildRows 메서드에 인수로 사용되어 행 배열을 반환합니다. 그런 다음 행에 있는 각 열의 값이 출력됩니다.

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에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.

버전 정보

.NET Framework

2.0, 1.1, 1.0에서 지원

.NET Compact Framework

2.0, 1.0에서 지원

참고 항목

참조

DataTable 클래스
DataTable 멤버
System.Data 네임스페이스
ParentRelations
GetParentRows
GetChildRows

기타 리소스

DataTable 작성 및 사용