다음을 통해 공유


실습: Word 작업 창의 컨트롤에 데이터 바인딩

중요합니다

작업 기능은 Office 2024에서 사용 중지되었습니다.

이 기능은 다음 Office 릴리스에서만 사용할 수 있습니다.

  • Microsoft 365
  • Office LTSC Professional Plus 2021
  • Office LTSC Standard 2021
  • Office Professional Plus 2016, 2019
  • Office Standard 2016, 2019

이 연습에서는 Word의 작업 창에서 컨트롤에 대한 데이터 바인딩을 보여 줍니다. 이 컨트롤은 SQL Server 데이터베이스의 테이블 간의 마스터/세부 관계를 보여 줍니다.

적용 대상: 이 항목의 정보는 Word의 문서 수준 프로젝트에 적용됩니다. 자세한 내용은 Office 응용 프로그램 및 프로젝트 유형 사용할 수 있는기능을 참조하세요.

이 단계별 설명에서는 다음 작업을 설명합니다.

  • 데이터에 바인딩된 Windows Forms 컨트롤을 사용하여 작업 창을 만듭니다.

  • 마스터/세부 정보 관계를 사용하여 컨트롤에 데이터를 표시합니다.

  • 애플리케이션이 열릴 때 작업 창을 표시합니다.

비고

컴퓨터는 다음 지침에서 Visual Studio 사용자 인터페이스 요소 중 일부에 대해 다른 이름 또는 위치를 표시할 수 있습니다. 가지고 있는 Visual Studio 버전과 사용하는 설정에 따라 이러한 요소가 결정됩니다. 자세한 내용은 Visual Studio IDE 개인 설정참조하세요.

필수 조건

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

  • Microsoft Office 개발자 도구가 포함된 Visual Studio 버전입니다. 자세한 내용은 Office 솔루션개발하도록 컴퓨터 구성을 참조하세요.

  • Word 2013 또는 Word 2010 .

  • Northwind SQL Server 샘플 데이터베이스를 사용하여 서버에 액세스합니다.

  • SQL Server 데이터베이스에서 읽고 쓸 수 있는 권한입니다.

프로젝트를 만듭니다.

첫 번째 단계는 Word 문서 프로젝트를 만드는 것입니다.

새 프로젝트를 만들려면

  1. Word 문서 프로젝트를 으로 이름하고, 내 Word 작업 창을으로 만드세요. 마법사에서 새 문서 만들기선택합니다.

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

    Visual Studio는 디자이너에서 새 Word 문서를 열고 내 Word 작업 창 프로젝트를 솔루션 탐색기 추가합니다.

작업 창에 컨트롤 추가

이 연습에서는 데이터 바인딩된 Windows Forms 컨트롤을 포함하는 작업 창 컨트롤이 필요합니다. 프로젝트에 데이터 원본을 추가한 다음 데이터 원본 창에서 작업 창 컨트롤로 컨트롤을 끌어옵니다.

작업 창 컨트롤을 추가하려면

  1. 솔루션 탐색기내 Word 작업창 프로젝트를 선택합니다.

  2. 프로젝트 메뉴에서 새 항목 추가클릭합니다.

  3. 새 항목 추가 대화 상자에서 작업 창 컨트롤선택하고 ActionsControl 이름을 지정한 다음 추가를 클릭합니다.

프로젝트에 데이터 원본을 추가하려면

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

    비고

    데이터 원본 보기를 사용할 수 없는 경우, Word 문서를 클릭한 다음 다시 확인합니다.

  2. 새 데이터 원본 추가 클릭하여 데이터 원본 구성 마법사시작합니다.

  3. 데이터베이스 선택하고 다음클릭합니다.

  4. Northwind 샘플 SQL Server 데이터베이스에 대한 데이터 연결을 선택하거나 새 연결 단추를 사용하여 새 연결을 추가합니다.

  5. 다음을 클릭합니다.

  6. 선택한 경우 연결을 저장하는 옵션을 선택 취소한 다음 다음클릭합니다.

  7. 데이터베이스 개체 창에서 테이블 노드를 확장합니다.

  8. SuppliersProducts 테이블 옆의 확인란을 선택하세요.

  9. Finish를 클릭합니다.

    마법사는 Suppliers 테이블과 Products 테이블을 데이터 원본 창에 추가합니다. 또한 솔루션 탐색기표시되는 형식화된 데이터 세트를 프로젝트에 추가합니다.

작업 창 컨트롤에 데이터 바인딩된 Windows Forms 컨트롤을 추가하려면

  1. 데이터 원본 창에서 Suppliers 테이블을 확장합니다.

  2. 회사 이름 노드에서 드롭다운 화살표를 클릭하고 ComboBox를 선택합니다.

  3. CompanyName을(를) 데이터 소스 창에서 작업 창 컨트롤로 끌어옵니다.

    작업 창 컨트롤에 ComboBox 컨트롤이 만들어집니다. 동시에 BindingSource, 이름이 지정된 SuppliersBindingSource, 테이블 어댑터, 및 DataSet가 구성 요소 트레이의 프로젝트에 추가됩니다.

  4. 구성 요소 트레이에서 SuppliersBindingNavigator 선택하고 삭제누릅니다. 이 연습에서는 SuppliersBindingNavigator 사용하지 않습니다.

    비고

    SuppliersBindingNavigator 삭제해도 생성된 코드가 모두 제거되지는 않습니다. 이 코드를 제거할 수 있습니다.

  5. 레이블 아래에 있도록 콤보 상자를 이동하고 Size 속성을 171, 21변경합니다.

  6. 데이터 원본 창에서 Suppliers 테이블의 자식인 Products 테이블을 확장합니다.

  7. ProductName 노드에서 드롭다운 화살표를 클릭하고 ListBox 선택합니다.

  8. ProductName 작업 창 컨트롤로 끌어옵니다.

    작업 창 컨트롤에 ListBox 컨트롤이 만들어집니다. 동시에 이름이 ProductBindingSourceBindingSource 및 테이블 어댑터가 구성 요소 트레이의 프로젝트에 추가됩니다.

  9. 레이블 아래에 있도록 목록 상자를 이동하고 Size 속성을 171,95변경합니다.

  10. 도구 상자에서 Button을(를) 드래그하여 작업 창 컨트롤에 놓고, 목록 상자 아래에 배치합니다.

  11. Button마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 속성 클릭하고 다음 속성을 변경합니다.

    재산 가치
    이름 삽입
    Text 삽입
  12. 컨트롤에 맞게 사용자 컨트롤의 크기를 조정합니다.

데이터 원본 설정

데이터 원본을 설정하려면 작업 창 컨트롤의 Load 이벤트에 코드를 추가하여 컨트롤을 DataTable데이터로 채우고 각 컨트롤에 대한 DataSourceDataMember 속성을 설정합니다.

데이터를 사용하여 컨트롤을 로드하려면

  1. ActionsControl 클래스의 Load 이벤트 처리기에서 다음 코드를 추가합니다.

    private void ActionsControl_Load(object sender, EventArgs e)
    {
        this.suppliersTableAdapter.Fill(this.northwindDataSet.Suppliers);
        this.productsTableAdapter.Fill(this.northwindDataSet.Products);
    }
    
  2. C#에서는 이벤트 처리기를 Load 이벤트에 연결해야 합니다. InitializeComponent호출 후 ActionsControl 생성자에 이 코드를 배치할 수 있습니다. 이벤트 처리기를 만드는 방법에 대한 자세한 내용은 방법:Office 프로젝트에서 이벤트 처리기 만들기를 참조하세요.

    this.Load += new EventHandler(ActionsControl_Load);
    

컨트롤의 데이터 바인딩 속성을 설정하려면

  1. CompanyNameComboBox 컨트롤을 선택합니다.

  2. 속성 창에서 DataSource 속성의 오른쪽에 있는 단추를 클릭하고 suppliersBindingSource선택합니다.

  3. DisplayMember 속성의 오른쪽에 있는 버튼을 클릭하고, CompanyName를 선택합니다.

  4. DataBindings 속성을 확장하고 Text 속성의 오른쪽에 있는 단추를 클릭한 다음, None을 선택합니다.

  5. ProductNameListBox 컨트롤을 선택합니다.

  6. 속성 창에서 DataSource 속성의 오른쪽에 있는 단추를 클릭하고, productsBindingSource를 선택합니다.

  7. DisplayMember 속성의 오른쪽에 있는 단추를 클릭하고 ProductName를 선택합니다.

  8. DataBindings 속성을 확장하고 SelectedValue 속성의 오른쪽에 있는 단추를 클릭한 다음 없음선택합니다.

테이블에 데이터를 삽입하는 메서드 추가

다음 작업은 바인딩된 컨트롤에서 데이터를 읽고 Word 문서의 표를 채우는 것입니다. 먼저 표의 머리글 서식을 지정하는 프로시저를 만든 다음 AddData 메서드를 추가하여 Word 테이블을 만들고 서식을 지정합니다.

표 머리글의 서식을 지정하려면

  1. ActionsControl 클래스에서 테이블의 머리글 서식을 지정하는 메서드를 만듭니다.

    static void SetHeadings(Microsoft.Office.Interop.Word.Cell tblCell, string text)
    {
        tblCell.Range.Text = text;
        tblCell.Range.Font.Bold = 1;
        tblCell.Range.ParagraphFormat.Alignment = 
            Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
    }
    

테이블을 만들려면

  1. ActionsControl 클래스에서 테이블이 없는 경우 테이블을 만드는 메서드를 작성하고 작업 창의 데이터를 테이블에 추가합니다.

    private void AddData(System.Data.DataRow row, string companyName)
    {
        object missing = System.Type.Missing;
    
        // Create a table if it doesn't already exist.
        if (Globals.ThisDocument.Tables.Count == 0)
        {
            try
            {
                // Create a table.
                Microsoft.Office.Interop.Word.Table tbl = Globals.ThisDocument.Tables.Add
                    (Globals.ThisDocument.Application.Selection.Range, 1, 4, ref missing, ref missing);
    
                // Insert headings.
                SetHeadings(tbl.Cell(1, 1), "Company Name");
                SetHeadings(tbl.Cell(1, 2), "Product Name");
                SetHeadings(tbl.Cell(1, 3), "Quantity");
                SetHeadings(tbl.Cell(1, 4), "Unit Price");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Problem creating Products table: " + ex.Message, 
                    "Actions Pane", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    
        // Add data from data row to the table.
        Microsoft.Office.Interop.Word.Selection selection = Globals.ThisDocument.Application.Selection;
    
        if (selection.Tables.Count > 0)
        {
            Microsoft.Office.Interop.Word.Row newRow = Globals.ThisDocument.Tables[1].Rows.Add(ref missing);
    
            newRow.Range.Font.Bold = 0;
    
            newRow.Range.ParagraphFormat.Alignment = 
                Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphLeft;
    
            newRow.Cells[4].Range.ParagraphFormat.Alignment =
                Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphRight;
    
            newRow.Cells[1].Range.Text = companyName;
            newRow.Cells[2].Range.Text = row["ProductName"].ToString();
            newRow.Cells[3].Range.Text = row["QuantityPerUnit"].ToString();
            newRow.Cells[4].Range.Text = Math.Round(Convert.ToDouble(row["UnitPrice"])).ToString("#,##0.00");
        }
        else
        {
            MessageBox.Show("Cursor must be within a table.", 
                "Actions Pane", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
    

Word 표에 텍스트를 삽입하려면

  1. 삽입 단추의 Click 이벤트 처리기에 다음 코드를 추가합니다.

    private void Insert_Click(object sender, System.EventArgs e)
    {
        System.Data.DataTable tbl = northwindDataSet.Products;
        System.Data.DataRow[] rows;
    
        // Check if a product is selected.
        if (this.productNameListBox.SelectedIndex >= 0)
        {
            System.Data.DataRowView productRow = (System.Data.DataRowView)this.productNameListBox.SelectedItem;
    
            string product = productRow.Row["ProductName"].ToString();
            string company = this.companyNameComboBox.Text;
    
            // Return the data row from the selected product.
            rows = tbl.Select("[ProductName] = '" + product.Replace("'", "''") + "'");
    
            this.AddData(rows[0], company);
        }
        else
        {
            MessageBox.Show("Please select a product.", "Actions Pane", MessageBoxButtons.OK);
        }
    }
    
  2. C#에서는 단추의 Click 이벤트에 대한 이벤트 처리기를 만들어야 합니다. 이 코드를 ActionsControl 클래스의 Load 이벤트 처리기에 배치할 수 있습니다.

    this.Insert.Click += new EventHandler(Insert_Click);
    

작업 창 표시

컨트롤이 추가되면 작업 창이 표시됩니다.

작업 창을 표시하려면

  1. 솔루션 탐색기ThisDocument.vb 또는 ThisDocument.cs마우스 오른쪽 단추로 클릭한 다음 바로 가기 메뉴에서 코드 보기를 클릭합니다.

  2. 다음 예제와 같이 ThisDocument 클래스의 맨 위에 컨트롤의 새 인스턴스를 만듭니다.

    private ActionsControl actions = new ActionsControl();
    
  3. 다음 예제와 같이 ThisDocumentStartup 이벤트 처리기에 코드를 추가합니다.

    this.ActionsPane.Controls.Add(actions);
    

애플리케이션 테스트

이제 문서를 테스트하여 문서를 열 때 작업 창이 표시되는지 확인할 수 있습니다. 작업 창의 컨트롤에서 마스터/세부 정보 관계를 테스트하고 삽입 단추를 클릭할 때 데이터가 Word 테이블에 채워지는지 확인합니다.

문서를 테스트하려면

  1. F5 눌러 프로젝트를 실행합니다.

  2. 작업 창이 표시되는지 확인합니다.

  3. 콤보 상자에서 회사를 선택하고 제품 목록 상자의 항목이 변경되었는지 확인합니다.

  4. 제품을 선택하고 작업 창에서 삽입을 클릭하고 제품 세부 정보가 Word의 표에 추가되었는지 확인합니다.

  5. 다양한 회사의 추가 제품을 삽입합니다.

다음 단계

이 연습에서는 Word의 작업 창에서 컨트롤에 데이터를 바인딩하는 기본 사항을 보여 줍니다. 다음에 올 수 있는 몇 가지 작업은 다음과 같습니다.

  • Excel의 컨트롤에 데이터 바인딩 자세한 내용은 연습: Excel 작업 창컨트롤에 데이터 바인딩을 참조하세요.

  • 프로젝트 배포. 자세한 내용은 ClickOnce사용하여 Office 솔루션 배포를 참조하세요.