다음을 통해 공유


연습: 응용 프로그램 수준 프로젝트의 단순 데이터 바인딩

응용 프로그램 수준 프로젝트의 호스트 컨트롤 및 Windows Forms 컨트롤에 데이터를 바인딩할 수 있습니다. 이 연습에서는 런타임에 Microsoft Office Word 문서에 컨트롤을 추가하고 해당 컨트롤을 데이터에 바인딩하는 방법을 보여 줍니다.

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

이 연습에서는 다음 작업을 수행합니다.

  • 런타임에 문서에 ContentControl 추가

  • 컨트롤을 데이터 집합의 인스턴스에 연결하는 BindingSource 만들기

  • 사용자가 레코드를 스크롤하고 컨트롤에서 레코드를 볼 수 있도록 설정

참고

다음 지침처럼 컴퓨터에서 Visual Studio 사용자 인터페이스 요소 일부에 대한 이름이나 위치를 다르게 표시할 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 Visual Studio 설정을 참조하십시오.

사전 요구 사항

이 연습을 완료하려면 다음 구성 요소가 필요합니다.

-

Microsoft Office 개발자 도구를 포함하는 Visual Studio 2010 버전입니다. 자세한 내용은 [Office 솔루션을 개발할 수 있도록 컴퓨터 구성](bb398242\(v=vs.100\).md)을 참조하십시오.
  • Word 2007 또는 Word 2010

  • AdventureWorksLT 샘플 데이터베이스가 연결되어 있는 SQL Server 2005 또는 SQL Server 2005 Express의 실행 중인 인스턴스에 액세스. AdventureWorksLT 데이터베이스는 CodePlex 웹 사이트에서 다운로드할 수 있습니다. 데이터베이스 연결에 대한 자세한 내용은 다음 항목을 참조하십시오.

새 프로젝트 만들기

첫 번째 단계에서는 Word 추가 기능 프로젝트를 만듭니다.

새 프로젝트를 만들려면

  1. Visual Basic 또는 C#을 사용하여 Populating Documents from a Database라는 Word 추가 기능 프로젝트를 만듭니다.

    자세한 내용은 방법: Visual Studio에서 Office 프로젝트 만들기를 참조하십시오.

    ThisAddIn.vb 또는 ThisAddIn.cs 파일이 열리고 솔루션 탐색기에 Populating Documents from a Database 프로젝트가 추가됩니다.

  2. 프로젝트가 .NET Framework 4를 대상으로 하는 경우 Microsoft.Office.Tools.Word.v4.0.Utilities.dll 어셈블리에 대한 참조를 추가합니다. 이 참조는 이 연습의 뒷부분에서 문서에 Windows Forms 컨트롤을 프로그래밍 방식으로 추가하는 데 필요합니다.

데이터 소스 만들기

데이터 소스 창을 사용하여 형식화된 데이터 집합을 프로젝트에 추가합니다.

프로젝트에 형식화된 데이터 집합을 추가하려면

  1. 데이터 메뉴에서 새 데이터 소스 추가를 클릭합니다.

    데이터 소스 구성 마법사가 열립니다.

  2. 데이터베이스를 클릭하고 다음을 클릭합니다.

  3. AdventureWorksLT 데이터베이스에 대한 기존 연결이 있으면 해당 연결을 선택하고 다음을 클릭합니다.

    그렇지 않으면 새 연결을 클릭하고 연결 추가 대화 상자에서 새 연결을 만듭니다. 자세한 내용은 방법: 데이터베이스의 데이터에 연결을 참조하십시오.

  4. 응용 프로그램 구성 파일에 연결 문자열 저장 페이지에서 다음을 클릭합니다.

  5. 데이터베이스 개체 선택 페이지에서 테이블을 확장한 다음 **Customer (SalesLT)**를 선택합니다.

  6. 마침을 클릭합니다.

    솔루션 탐색기에 AdventureWorksLTDataSet.xsd 파일이 추가됩니다. 이 파일은 다음 항목을 정의합니다.

    • 이름이 AdventureWorksLTDataSet인 형식화된 데이터 집합. 이 데이터 집합은 AdventureWorksLT 데이터베이스의 Customer (SalesLT) 테이블에 있는 콘텐츠를 나타냅니다.

    • 이름이 CustomerTableAdapter인 TableAdapter. 이 TableAdapter는 AdventureWorksLTDataSet에서 데이터를 읽고 쓰는 데 사용할 수 있습니다. 자세한 내용은 TableAdapter 개요를 참조하십시오.

    이 연습의 뒷부분에서 이들 개체를 모두 사용하게 됩니다.

컨트롤 만들기 및 데이터에 컨트롤 바인딩

이 연습에서 데이터베이스 레코드를 보기 위한 인터페이스는 매우 기본적이며 문서 내부의 오른쪽에 만들어집니다. 하나의 ContentControl은 데이터베이스 레코드를 한 번에 하나씩 표시하고 두 개의 Button 컨트롤은 레코드를 앞뒤로 스크롤할 수 있게 해 줍니다. 콘텐츠 컨트롤은 BindingSource를 사용하여 데이터베이스에 연결합니다.

컨트롤을 데이터에 바인딩하는 방법에 대한 자세한 내용은 Office 솔루션의 컨트롤에 데이터 바인딩을 참조하십시오.

문서에 인터페이스를 만들려면

  1. ThisAddIn 클래스에서 다음 컨트롤을 선언하여 AdventureWorksLTDataSet 데이터베이스의 Customer 테이블을 표시하고 스크롤합니다.

    Private adventureWorksDataSet As AdventureWorksLTDataSet
    Private customerTableAdapter As AdventureWorksLTDataSetTableAdapters.CustomerTableAdapter
    Private customerBindingSource As System.Windows.Forms.BindingSource
    Private customerContentControl As Microsoft.Office.Tools.Word.RichTextContentControl
    Private WithEvents button1 As Microsoft.Office.Tools.Word.Controls.Button
    Private WithEvents button2 As Microsoft.Office.Tools.Word.Controls.Button
    
    private AdventureWorksLTDataSet adventureWorksDataSet;
    private AdventureWorksLTDataSetTableAdapters.CustomerTableAdapter customerTableAdapter;
    private System.Windows.Forms.BindingSource customerBindingSource;
    private Microsoft.Office.Tools.Word.RichTextContentControl customerContentControl;
    private Microsoft.Office.Tools.Word.Controls.Button button1;
    private Microsoft.Office.Tools.Word.Controls.Button button2;
    
  2. ThisAddIn_Startup 메서드에서 다음 코드를 추가하여 데이터 집합을 초기화하고 AdventureWorksLTDataSet 데이터베이스의 정보로 데이터 집합을 채웁니다.

    Me.adventureWorksDataSet = New AdventureWorksLTDataSet()
    Me.customerTableAdapter = New AdventureWorksLTDataSetTableAdapters.CustomerTableAdapter()
    Me.customerTableAdapter.Fill(Me.adventureWorksDataSet.Customer)
    Me.customerBindingSource = New System.Windows.Forms.BindingSource()
    
    this.adventureWorksDataSet = new AdventureWorksLTDataSet();
    this.customerTableAdapter = new AdventureWorksLTDataSetTableAdapters.CustomerTableAdapter();
    this.customerTableAdapter.Fill(this.adventureWorksDataSet.Customer);
    this.customerBindingSource = new System.Windows.Forms.BindingSource();
    
  3. ThisAddIn_Startup 메서드에 다음 코드를 추가합니다. 이 코드는 문서를 확장하는 호스트 항목을 생성합니다. 자세한 내용은 런타임에 응용 프로그램 수준 추가 기능의 Word 문서 및 Excel 통합 문서 확장을 참조하십시오.

    Dim currentDocument As Word.Document = Me.Application.ActiveDocument
    
    ' Use the following line of code in projects that target the .NET Framework 4.
    Dim extendedDocument As Document = Globals.Factory.GetVstoObject(currentDocument)
    
    ' In projects that target the .NET Framework 3.5, use the following line of code instead.
    ' Dim extendedDocument As Document = currentDocument.GetVstoObject()
    
    Word.Document currentDocument = this.Application.ActiveDocument;
    
    // Use the following line of code in projects that target the .NET Framework 4.
    Document extendedDocument = Globals.Factory.GetVstoObject(currentDocument);
    
    // In projects that target the .NET Framework 3.5, use the following line of code instead.
    // Document extendedDocument = currentDocument.GetVstoObject();
    
  4. 문서의 처음 부분에 여러 개의 범위를 정의합니다. 이러한 범위는 텍스트를 삽입하고 컨트롤을 배치할 위치를 식별합니다.

    extendedDocument.Paragraphs(1).Range.InsertParagraphBefore()
    extendedDocument.Paragraphs(1).Range.InsertParagraphBefore()
    extendedDocument.Paragraphs(1).Range.Text = "The companies listed in the AdventureWorksLT database:   "
    extendedDocument.Paragraphs(2).Range.Text = "  "
    
    Dim range1 As Word.Range = extendedDocument.Paragraphs(2).Range.Characters.First
    Dim range2 As Word.Range = extendedDocument.Paragraphs(2).Range.Characters.Last
    Dim range3 As Word.Range = extendedDocument.Paragraphs(1).Range.Characters.Last
    
    extendedDocument.Paragraphs[1].Range.InsertParagraphBefore();
    extendedDocument.Paragraphs[1].Range.InsertParagraphBefore();
    extendedDocument.Paragraphs[1].Range.Text = 
        "The companies listed in the AdventureWorksLT database:   \n";
    extendedDocument.Paragraphs[2].Range.Text = "  "; 
    
    Word.Range range1 = extendedDocument.Paragraphs[2].Range.Characters.First;
    Word.Range range2 = extendedDocument.Paragraphs[2].Range.Characters.Last;
    Word.Range range3 = extendedDocument.Paragraphs[1].Range.Characters.Last;
    
  5. 이전에 정의한 범위에 인터페이스 컨트롤을 추가합니다.

    Me.button1 = extendedDocument.Controls.AddButton(range1, 60, 15, "1")
    Me.button1.Text = "Previous"
    Me.button2 = extendedDocument.Controls.AddButton(range2, 60, 15, "2")
    Me.button2.Text = "Next"
    
    Me.customerContentControl = extendedDocument.Controls.AddRichTextContentControl(range3, _
        "richTextContentControl1")
    
    this.button1 = extendedDocument.Controls.AddButton(range1, 60, 15, "1");
    this.button1.Text = "Previous";
    this.button2 = extendedDocument.Controls.AddButton(range2, 60, 15, "2");
    this.button2.Text = "Next";
    
    this.customerContentControl = extendedDocument.Controls.AddRichTextContentControl(
        range3, "richTextContentControl1");
    
  6. BindingSource를 사용하여 콘텐츠 컨트롤을 AdventureWorksLTDataSet에 바인딩합니다. C# 개발자의 경우 Button 컨트롤에 대한 두 개의 이벤트 처리기를 추가합니다.

    Me.customerBindingSource.DataSource = Me.adventureWorksDataSet.Customer
    Me.customerContentControl.DataBindings.Add("Text", Me.customerBindingSource, _
        "CompanyName", True, Me.customerContentControl.DataBindings.DefaultDataSourceUpdateMode)
    
    this.customerBindingSource.DataSource = this.adventureWorksDataSet.Customer;
    this.customerContentControl.DataBindings.Add("Text", this.customerBindingSource, 
        "CompanyName", true, this.customerContentControl.DataBindings.DefaultDataSourceUpdateMode);
    
    this.button1.Click += new EventHandler(button1_Click);
    this.button2.Click += new EventHandler(button2_Click);
    
  7. 데이터베이스 레코드를 탐색하는 다음 코드를 추가합니다.

    Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) _
        Handles button1.Click
        Me.customerBindingSource.MovePrevious()
    End Sub
    
    Private Sub button2_Click(ByVal sender As Object, ByVal e As EventArgs) _
        Handles button2.Click
        Me.customerBindingSource.MoveNext()
    End Sub
    
    void button1_Click(object sender, EventArgs e)
    {
        this.customerBindingSource.MovePrevious();
    }
    
    void button2_Click(object sender, EventArgs e)
    {
        this.customerBindingSource.MoveNext();
    }
    

추가 기능 테스트

Word를 열면 콘텐츠 컨트롤은 AdventureWorksLTDataSet 데이터 집합의 데이터를 표시합니다. 다음이전 단추를 클릭하여 데이터베이스 레코드를 스크롤합니다.

추가 기능을 테스트하려면

  1. F5 키를 누릅니다.

    customerContentControl이라는 콘텐츠 컨트롤이 만들어지고 데이터로 채워집니다. 이와 함께 adventureWorksLTDataSet이라는 데이터 집합 개체와 customerBindingSource라는 BindingSource가 프로젝트에 추가됩니다. ContentControlBindingSource에 바인딩되고, 이는 다시 데이터 집합 개체에 바인딩됩니다.

  2. 다음이전 단추를 클릭하여 데이터베이스 레코드를 스크롤합니다.

참고 항목

작업

방법: 데이터베이스의 데이터로 워크시트 채우기

방법: 데이터베이스의 데이터로 문서 채우기

방법: 서비스의 데이터로 문서 채우기

방법: 개체의 데이터로 문서 채우기

방법: 워크시트에서 데이터베이스 레코드 스크롤

방법: Host 컨트롤의 데이터로 데이터 소스 업데이트

연습: 문서 수준 프로젝트의 단순 데이터 바인딩

연습: 문서 수준 프로젝트의 복합 데이터 바인딩

방법: 개체의 데이터로 문서 채우기

방법: Host 컨트롤의 데이터로 데이터 소스 업데이트

참조

BindingSource 구성 요소 개요

개념

Office 솔루션에서 로컬 데이터베이스 파일 사용 개요

데이터 소스 개요

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

Office 솔루션에서 로컬 데이터베이스 파일 사용 개요

Windows Forms 응용 프로그램에서 데이터에 연결

기타 리소스

Office 솔루션의 데이터

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