다음을 통해 공유


연습: VSTO 추가 기능 프로젝트의 단순 데이터 바인딩

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

적용 대상: 이 항목의 정보는 Word의 VSTO 추가 기능 프로젝트에 적용됩니다. 자세한 내용은 Office 애플리케이션 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하세요.

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

  • 런타임에 문서에 ContentControl 추가

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

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

참고 항목

일부 Visual Studio 사용자 인터페이스 요소의 경우 다음 지침에 설명된 것과 다른 이름 또는 위치가 시스템에 표시될 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 IDE 개인 설정을 참조하세요.

필수 조건

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

새 프로젝트 만들기

첫 번째 단계는 Word VSTO 추가 기능 프로젝트를 만드는 것입니다.

새 프로젝트를 만들려면

  1. Visual Basic 또는 C#을 사용하여 이름이 데이터베이스에서 문서 채우기인 Word VSTO 추가 기능 프로젝트를 만듭니다.

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

    Visual Studio에 ThisAddIn.vb 또는 ThisAddIn.cs 파일이 열리고 데이터베이스에서 문서 채우기 프로젝트가 솔루션 탐색기에 추가됩니다.

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

데이터 원본 만들기

데이터 원본 창을 사용하여 형식화된 데이터 세트를 프로젝트에 추가합니다.

프로젝트에 형식화된 데이터 세트를 추가하려면

  1. 데이터 원본 창이 표시되지 않으면 메뉴 모음에서 보기>다른 창>데이터 원본을 선택하여 이 창을 표시합니다.

  2. 새 데이터 소스 추가 를 선택하여 데이터 소스 구성 마법사를 시작합니다.

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

  4. AdventureWorksLT 데이터베이스에 대한 기존 연결이 있는 경우 이 연결을 선택하고 다음을 클릭합니다.

    그렇지 않은 경우 새 연결을 클릭하고 연결 추가 대화 상자를 사용하여 새 연결을 만듭니다. 자세한 내용은 새 데이터 연결 추가를 참조하세요.

  5. 애플리케이션 구성 파일에 연결 문자열 저장 페이지에서 다음을 클릭합니다.

  6. 데이터베이스 개체 선택 페이지에서 테이블 을 확장하고 Customer(SalesLT)를 선택합니다.

  7. Finish를 클릭합니다.

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

    • AdventureWorksLTDataSet라는 형식화된 데이터 세트. 이 데이터 세트는 AdventureWorksLT 데이터베이스의 Customer(SalesLT) 테이블 내용을 나타냅니다.

    • CustomerTableAdapter라는 TableAdapter. 이 TableAdapter를 사용하여 AdventureWorksLTDataSet에서 데이터를 읽고 쓸 수 있습니다. 자세한 내용은 TableAdapter 개요를 참조하세요.

      이 연습 뒷부분에서는 이러한 두 개체를 모두 사용합니다.

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

이 연습에서 데이터베이스 레코드를 보기 위한 인터페이스는 기본적인 것으로, 문서 내에서 즉시 만들어집니다. 하나의 ContentControl은 한 번에 단일 데이터베이스 레코드를 표시하고 두 개의 Button 컨트롤을 사용하면 레코드를 앞뒤로 스크롤할 수 있습니다. 콘텐츠 컨트롤은 BindingSource 를 사용하여 데이터베이스에 연결합니다.

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

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

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

    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 데이터베이스의 정보로 데이터 세트를 채웁니다.

    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 메서드에 다음 코드를 추가합니다. 이렇게 하면 문서를 확장하는 호스트 항목이 생성됩니다. 자세한 내용은 런타임 시 VSTO 추가 기능에서 Word 문서 및 Excel 통합 문서 확장을 참조하세요.

    Word.Document currentDocument = this.Application.ActiveDocument;
    
    Document extendedDocument = Globals.Factory.GetVstoObject(currentDocument);
    
  4. 문서의 시작 부분에서 여러 범위를 정의합니다. 이러한 범위는 텍스트를 삽입하고 컨트롤을 배치할 위치를 식별합니다.

    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. 이전에 정의된 범위에 인터페이스 컨트롤을 추가합니다.

    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. AdventureWorksLTDataSet 를 사용하여 콘텐츠 컨트롤을 BindingSource에 바인딩합니다. C# 개발자의 경우 Button 컨트롤에 대해 두 개의 이벤트 처리기를 추가합니다.

    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. 데이터베이스 레코드를 탐색하는 다음 코드를 추가합니다.

    void button1_Click(object sender, EventArgs e)
    {
        this.customerBindingSource.MovePrevious();
    }
    
    void button2_Click(object sender, EventArgs e)
    {
        this.customerBindingSource.MoveNext();
    }
    

추가 기능 테스트

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

VSTO 추가 기능을 테스트하려면

  1. F5키를 누릅니다.

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

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