다음을 통해 공유


Office 솔루션의 컨트롤에 데이터 바인딩

Microsoft Office Word 문서 또는 Microsoft Office Excel 워크시트의 Windows Forms 컨트롤과 호스트 컨트롤을 데이터 소스에 바인딩하여 해당 컨트롤에 자동으로 데이터가 표시되도록 할 수 있습니다. 응용 프로그램 수준 프로젝트와 문서 수준 프로젝트에서 컨트롤에 데이터를 바인딩할 수 있습니다.

적용 대상: 이 항목의 정보는 Microsoft Office 2010 및 2007 Microsoft Office system의 문서 수준 프로젝트 및 응용 프로그램 수준 프로젝트에 적용됩니다. 자세한 내용은 Office 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하십시오.

호스트 컨트롤은 Word의 콘텐츠 컨트롤 및 Excel의 명명된 범위와 같이 Word 및 Excel 개체 모델에 있는 개체를 확장합니다. 자세한 내용은 호스트 항목 및 호스트 컨트롤 개요를 참조하십시오.

Windows Forms 컨트롤과 호스트 컨트롤은 모두 데이터 집합, 데이터 테이블 등의 데이터 소스에 대한 단순 데이터 바인딩 및 복합 데이터 바인딩을 지원하는 Windows Forms 데이터 바인딩 모델을 사용합니다. Windows Forms의 데이터 바인딩 모델에 대한 자세한 내용은 데이터 바인딩 및 Windows Forms을 참조하십시오.

비디오에 링크 관련 비디오 데모를 보려면 How Do I: Consume Database Data in Excel?을 참조하십시오.

단순 데이터 바인딩

단순 데이터 바인딩은 데이터 테이블의 값과 같은 단일 데이터 요소에 컨트롤 속성을 바인딩할 때 수행됩니다. 예를 들어, NamedRange 컨트롤에는 데이터 집합의 필드에 바인딩할 수 있는 Value2 속성이 있습니다. 데이터 집합의 필드가 변경되면 명명된 범위의 값도 변경됩니다. XMLNodes 컨트롤을 제외한 모든 호스트 컨트롤은 단순 데이터 바인딩을 지원합니다. XMLNodes 컨트롤은 컬렉션이므로 데이터 바인딩을 지원하지 않습니다.

호스트 컨트롤에 대한 단순 데이터 바인딩을 수행하려면 컨트롤의 DataBindings() 속성에 Binding을 추가합니다. Binding 개체는 컨트롤 속성 값과 데이터 요소 값 사이의 단순 바인딩을 나타냅니다.

다음 예제에서는 문서 수준 프로젝트에서 Value2 속성을 데이터 요소에 바인딩하는 방법을 보여 줍니다. 이 코드 예제는 DataBindings() 속성에 대해 제공되는 보다 큰 예제의 일부입니다.

Dim binding1 As New Binding("Value2", ds, "Customers.Names", True)
namedRange1.DataBindings.Add(binding1)
Binding binding1 = new Binding("Value2", ds, "Customers.Names", true);
namedRange1.DataBindings.Add(binding1);

단순 데이터 바인딩을 보여 주는 연습은 연습: 문서 수준 프로젝트의 단순 데이터 바인딩(문서 수준 프로젝트의 경우) 및 연습: 응용 프로그램 수준 프로젝트의 단순 데이터 바인딩(응용 프로그램 수준 프로젝트의 경우)를 참조하십시오.

복합 데이터 바인딩

복합 데이터 바인딩은 데이터 테이블의 여러 열과 같은 두 개 이상의 데이터 요소에 컨트롤 속성을 바인딩할 때 수행됩니다. Excel용 ListObject 컨트롤은 복합 데이터 바인딩을 지원하는 유일한 호스트 컨트롤입니다. 그 외에도 DataGridView 컨트롤과 같은 여러 Windows Forms 컨트롤에서 복합 데이터 바인딩을 지원합니다.

복합 데이터 바인딩을 수행하려면 컨트롤의 DataSource 속성을 복합 데이터 바인딩에서 지원하는 데이터 소스 개체로 설정합니다. 예를 들어 ListObject 컨트롤의 DataSource 속성은 데이터 테이블의 여러 열에 바인딩할 수 있습니다. 데이터 테이블의 모든 데이터는 ListObject 컨트롤에 표시되며, 데이터 테이블의 데이터가 변경되는 경우 ListObject도 변경됩니다. 복합 데이터 바인딩에 사용할 수 있는 데이터 소스 목록은 Windows Forms에서 지원하는 데이터 소스를 참조하십시오.

다음 코드 예제에서는 DataTable 개체가 두 개 있는 DataSet을 만들고 테이블 중 하나를 데이터로 채웁니다. 그런 다음 데이터가 들어 있는 테이블에 ListObject를 바인딩합니다. 이 예제는 Excel 문서 수준 프로젝트를 위한 것입니다.

    Private Sub ListObject_DataSourceAndMember()
        ' Create a DataSet and two DataTables.
        Dim ordersDataSet As New DataSet("ordersDataSet")
        Dim tableCustomers As New DataTable("Customers")
        Dim tableProducts As New DataTable("Products")
        ordersDataSet.Tables.Add(tableCustomers)
        ordersDataSet.Tables.Add(tableProducts)

        ' Add a data to the Customers DataTable.
        tableCustomers.Columns.Add(New DataColumn("LastName"))
        tableCustomers.Columns.Add(New DataColumn("FirstName"))
        Dim dr As DataRow = tableCustomers.NewRow()
        dr("LastName") = "Chan"
        dr("FirstName") = "Gareth"
        tableCustomers.Rows.Add(dr)

        ' Create a list object.
        Dim List1 As Microsoft.Office.Tools.Excel.ListObject = _
            Me.Controls.AddListObject(Me.Range( _
            "A1"), "Customers")

        ' Bind the list object to the Customers table.
        List1.AutoSetDataBoundColumnHeaders = True
        List1.DataSource = ordersDataSet
        List1.DataMember = "Customers"

    End Sub

private void ListObject_DataSourceAndMember()
{
    // Create a DataSet and two DataTables.
    DataSet ordersDataSet = new DataSet("ordersDataSet");
    DataTable tableCustomers = new DataTable("Customers");
    DataTable tableProducts = new DataTable("Products");
    ordersDataSet.Tables.Add(tableCustomers);
    ordersDataSet.Tables.Add(tableProducts);

    // Add a data to the Customers DataTable.
    tableCustomers.Columns.Add(new DataColumn("LastName"));
    tableCustomers.Columns.Add(new DataColumn("FirstName"));
    DataRow dr = tableCustomers.NewRow();
    dr["LastName"] = "Chan";
    dr["FirstName"] = "Gareth";
    tableCustomers.Rows.Add(dr);

    // Create a list object.
    Microsoft.Office.Tools.Excel.ListObject list1 = 
        this.Controls.AddListObject(
        this.Range["A1", missing], "Customers");

    // Bind the list object to the Customers table.
    list1.AutoSetDataBoundColumnHeaders = true;
    list1.DataSource = ordersDataSet;
    list1.DataMember = "Customers";
}

복합 데이터 바인딩을 보여 주는 연습은 연습: 문서 수준 프로젝트의 복합 데이터 바인딩(문서 수준 프로젝트의 경우) 및 연습: 응용 프로그램 수준 프로젝트의 복합 데이터 바인딩(응용 프로그램 수준 프로젝트의 경우)를 참조하십시오.

문서 및 통합 문서에 데이터 표시

문서 수준 프로젝트에서는 Windows Forms의 경우와 동일한 방법으로 데이터 소스 창을 사용하여 데이터 바인딩된 컨트롤을 문서나 통합 문서에 쉽게 추가할 수 있습니다. 데이터 소스 창을 사용하는 방법에 대한 자세한 내용은 Visual Studio에서 데이터에 Windows Forms 컨트롤 바인딩데이터 소스 창을 참조하십시오.

데이터 소스 창에서 컨트롤 끌기

데이터 소스 창에서 문서로 개체를 끌어 오면 문서에 컨트롤이 만들어집니다. 만들어지는 컨트롤의 형식은 단일 데이터 열을 바인딩하는지 여러 데이터 열을 바인딩하는지에 따라 달라집니다.

Excel의 경우 각각의 개별 필드에 대해 워크시트에 NamedRange 컨트롤이 만들어지고 여러 행과 열이 포함된 각 데이터 범위에 대해 ListObject 컨트롤이 만들어집니다. 데이터 소스 창에서 테이블이나 필드를 선택한 다음 드롭다운 목록에서 다른 컨트롤을 선택하면 이 기본 컨트롤을 변경할 수 있습니다.

ContentControl 컨트롤이 문서에 추가됩니다. 콘텐츠 컨트롤의 형식은 선택한 필드의 데이터 형식에 따라 달라집니다.

디자인 타임에 문서 수준 프로젝트에서 데이터 바인딩

다음 항목에서는 디자인 타임에 데이터를 바인딩하는 예제를 보여 줍니다.

응용 프로그램 수준 프로젝트에서 데이터 바인딩

응용 프로그램 수준 프로젝트에서는 런타임에만 컨트롤을 추가할 수 있습니다. 다음 항목에서는 런타임에 데이터를 바인딩하는 예제를 보여 줍니다.

호스트 컨트롤에 바인딩된 데이터 업데이트

데이터 소스와 호스트 컨트롤 사이의 데이터 바인딩에는 양방향 데이터 업데이트가 필요합니다. 단순 데이터 바인딩의 경우 데이터 소스에서의 변경 내용은 호스트 컨트롤에 자동으로 반영되는 반면 호스트 컨트롤에서의 변경 내용은 명시적 호출을 통해서만 데이터 소스에 업데이트됩니다. 데이터 바인딩 필드는 경우에 따라 어느 한 필드에서의 변경이 이루어지기 위해 다른 필드의 변경이 동반되어야 하기 때문입니다. 예를 들어, 각각 나이와 경력을 나타내는 두 필드의 경우 경력이 나이보다 많을 수는 없습니다. 예를 들어, 나이를 50세에서 25세로 업데이트하고 경력을 30년에서 10년으로 바꾸어야 하는 경우 사용자가 이러한 두 필드를 동시에 변경하지 않는 한 업데이트는 불가능합니다. 이러한 문제를 해결하기 위해 단순 데이터 바인딩을 사용하는 필드는 코드에서 명시적으로 업데이트를 전달할 때까지 업데이트되지 않습니다.

단순 데이터 바인딩을 사용할 수 있는 호스트 컨트롤에서 데이터 소스를 업데이트하려면 DataSet 또는 DataTable 같은 메모리 내 데이터 소스와 백 엔드 데이터베이스(솔루션에서 백 엔드 데이터베이스를 사용하는 경우)로 업데이트를 보내야 합니다.

ListObject 컨트롤을 사용하여 복합 데이터 바인딩을 수행하는 경우에는 메모리 내 데이터 소스를 명시적으로 업데이트할 필요가 없습니다. 이 경우 추가로 코드를 작성하지 않아도 메모리 내 데이터 소스에 변경 내용이 자동으로 보내집니다.

자세한 내용은 방법: Host 컨트롤의 데이터로 데이터 소스 업데이트를 참조하십시오.

참고 항목

작업

방법: Windows Form에 단순 바인딩된 컨트롤 만들기

방법: TableAdapter를 사용하여 데이터 업데이트

개념

데이터 바인딩 및 Windows Forms

Visual Studio에서 데이터에 Windows Forms 컨트롤 바인딩

데이터 집합에 데이터 저장

데이터 캐싱

기타 리소스

How Do I: Consume Database Data in Excel?

ADO.NET의 동시성 제어

Office 솔루션의 데이터