연습: 응용 프로그램 수준 프로젝트에서 서비스의 데이터로 바인딩
응용 프로그램 수준 프로젝트의 호스트 컨트롤에 데이터를 바인딩할 수 있습니다. 이 연습에서는 런타임에 Microsoft Office Word 문서에 컨트롤을 추가하고, 해당 컨트롤을 MSDN Content Service에서 검색된 데이터에 바인딩하고, 이벤트에 응답하는 방법을 보여 줍니다.
적용 대상: 이 항목의 정보는 Word 2007 및 Word 2010의 응용 프로그램 수준 프로젝트에 적용됩니다. 자세한 내용은 Office 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하십시오.
이 연습에서는 다음 작업을 수행합니다.
런타임에 문서에 RichTextContentControl 컨트롤 추가
웹 서비스에서 데이터에 RichTextContentControl 컨트롤 바인딩
RichTextContentControl 컨트롤의 Entering 이벤트에 응답
참고
다음 지침처럼 컴퓨터에서 Visual Studio 사용자 인터페이스 요소 일부에 대한 이름이나 위치를 다르게 표시할 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 Visual Studio 설정을 참조하십시오.
사전 요구 사항
이 연습을 완료하려면 다음 구성 요소가 필요합니다.
-
Microsoft Office 개발자 도구를 포함하는 Visual Studio 2010 버전입니다. 자세한 내용은 [Office 솔루션을 개발할 수 있도록 컴퓨터 구성](bb398242\(v=vs.100\).md)을 참조하십시오.
- Microsoft Office Word 2007 또는 Word 2010
새 프로젝트 만들기
첫 번째 단계에서는 Word 추가 기능 프로젝트를 만듭니다.
새 프로젝트를 만들려면
Visual Basic이나 C#을 사용하여 MTPS Content Service라는 Word 추가 기능 프로젝트를 만듭니다.
자세한 내용은 방법: Visual Studio에서 Office 프로젝트 만들기를 참조하십시오.
ThisAddIn.vb 또는 ThisAddIn.cs 파일이 열리고 솔루션 탐색기에 해당 프로젝트가 추가됩니다.
웹 서비스 추가
이 연습의 경우 MTPS Content Service라는 웹 서비스를 사용합니다. 이 웹 서비스는 지정된 MSDN 문서의 정보를 XML 문자열 또는 일반 텍스트 형식으로 반환합니다. 이후 단계에서는 반환된 정보를 콘텐츠 컨트롤에 표시하는 방법을 보여 줍니다.
MTPS Content Service를 프로젝트에 추가하려면
데이터 메뉴에서 새 데이터 소스 추가를 클릭합니다.
데이터 소스 구성 마법사에서 서비스를 클릭하고 다음을 클릭합니다.
주소 필드에 다음 URL을 입력합니다.
http://services.msdn.microsoft.com/ContentServices/ContentService.asmx
이동을 클릭합니다.
네임스페이스 필드에 ContentService를 입력하고 확인을 클릭합니다.
참조 추가 마법사 대화 상자에서 마침을 클릭합니다.
런타임에 콘텐츠 컨트롤 추가 및 데이터에 바인딩
응용 프로그램 수준 프로젝트에서는 런타임에 컨트롤을 추가하고 바인딩합니다. 이 연습의 경우 사용자가 콘텐츠 컨트롤 내부를 클릭할 때 웹 서비스에서 데이터를 검색하도록 콘텐트 컨트롤을 구성합니다.
콘텐츠 컨트롤을 추가하고 데이터에 바인딩하려면
ThisAddIn 클래스에서 MTPS Content Service, 콘텐츠 컨트롤 및 데이터 바인딩에 대한 변수를 선언합니다.
Private request As ContentService.getContentRequest Private proxy As ContentService.ContentServicePortTypeClient Private document As ContentService.requestedDocument() Private response As ContentService.getContentResponse Private appId As ContentService.appId Private WithEvents richTextContentControl As Microsoft.Office.Tools.Word.RichTextContentControl Private components As System.ComponentModel.Container Private primaryDocumentsBindingSource As System.Windows.Forms.BindingSource
private ContentService.getContentRequest request; private ContentService.ContentServicePortTypeClient proxy; private ContentService.requestedDocument[] document; private ContentService.getContentResponse response; private ContentService.appId appId; private Microsoft.Office.Tools.Word.RichTextContentControl richTextContentControl; private System.ComponentModel.Container components; private System.Windows.Forms.BindingSource primaryDocumentsBindingSource;
ThisAddIn 클래스에 다음 메서드를 추가합니다. 이 메서드는 활성 문서의 처음 부분에 콘텐츠 컨트롤을 만듭니다.
Private Sub AddRichTextControlAtRange() Dim currentDocument As Word.Document = Me.Application.ActiveDocument currentDocument.Paragraphs(1).Range.InsertParagraphBefore() ' 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() richTextContentControl = extendedDocument.Controls.AddRichTextContentControl _ (currentDocument.Paragraphs(1).Range, "richTextControl2") richTextContentControl.PlaceholderText = _ "Click here to download MSDN Library information about content controls." End Sub
private void AddRichTextControlAtRange() { Word.Document currentDocument = this.Application.ActiveDocument; currentDocument.Paragraphs[1].Range.InsertParagraphBefore(); // 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(); richTextContentControl = extendedDocument.Controls.AddRichTextContentControl( currentDocument.Paragraphs[1].Range, "richTextContentControl"); richTextContentControl.PlaceholderText = "Click here to download MSDN Library information about content controls."; }
ThisAddIn 클래스에 다음 메서드를 추가합니다. 이 메서드는 요청을 만들어 웹 서비스로 보내는 데 필요한 개체를 초기화합니다.
Private Sub InitializeServiceObjects() request = New ContentService.getContentRequest() proxy = New ContentService.ContentServicePortTypeClient() document = New ContentService.requestedDocument(0) {} response = New ContentService.getContentResponse() appId = New ContentService.appId() components = New System.ComponentModel.Container() primaryDocumentsBindingSource = New System.Windows.Forms.BindingSource(components) End Sub
private void InitializeServiceObjects() { request = new ContentService.getContentRequest(); proxy = new ContentService.ContentServicePortTypeClient(); document = new ContentService.requestedDocument[1]; response = new ContentService.getContentResponse(); appId = new ContentService.appId(); components = new System.ComponentModel.Container(); primaryDocumentsBindingSource = new System.Windows.Forms.BindingSource(this.components); }
사용자가 콘텐츠 컨트롤의 내부를 클릭할 때 콘텐츠 컨트롤에 대한 MSDN Library 문서를 검색하고 해당 데이터를 콘텐츠 컨트롤에 바인딩하는 이벤트 처리기를 만듭니다.
Private Sub richTextContentControl_Entering _ (ByVal sender As Object, ByVal e As ContentControlEnteringEventArgs) _ Handles richTextContentControl.Entering document(0) = New ContentService.requestedDocument() With document(0) .type = ContentService.documentTypes.primary .selector = "Mtps.Xhtml" End With With request .contentIdentifier = "ed59e522-dd6e-4c82-8d49-f5dbcfcc950d" .locale = "en-us" .version = "VS.90" .requestedDocuments = document End With response = proxy.GetContent(appId, request) primaryDocumentsBindingSource.DataSource = _ response.primaryDocuments(0).Any.InnerText richTextContentControl.DataBindings.Add("Text", _ primaryDocumentsBindingSource.DataSource, "", True, _ System.Windows.Forms.DataSourceUpdateMode.OnValidation) End Sub
void richTextContentControl_Entering(object sender, ContentControlEnteringEventArgs e) { document[0] = new ContentService.requestedDocument(); document[0].type = ContentService.documentTypes.primary; document[0].selector = "Mtps.Xhtml"; request.contentIdentifier = "ed59e522-dd6e-4c82-8d49-f5dbcfcc950d"; request.locale = "en-us"; request.version = "VS.90"; request.requestedDocuments = document; response = proxy.GetContent(appId, request); primaryDocumentsBindingSource.DataSource = response.primaryDocuments[0].Any.InnerText; richTextContentControl.DataBindings.Add("Text", primaryDocumentsBindingSource.DataSource, "", true, System.Windows.Forms.DataSourceUpdateMode.OnValidation); }
ThisAddIn_Startup 메서드에서 AddRichTextControlAtRange 및 InitializeServiceObjects 메서드를 호출합니다. C# 프로그래머의 경우 이벤트 처리기를 추가합니다.
Private Sub ThisAddIn_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup AddRichTextControlAtRange() InitializeServiceObjects() End Sub
private void ThisAddIn_Startup(object sender, System.EventArgs e) { AddRichTextControlAtRange(); InitializeServiceObjects(); this.richTextContentControl.Entering += richTextContentControl_Entering; }
추가 기능 테스트
Word를 열면 RichTextContentControl 컨트롤이 나타납니다. 이 컨트롤 내부를 클릭하면 컨트롤의 텍스트가 변경됩니다.
추가 기능을 테스트하려면
F5 키를 누릅니다.
콘텐츠 컨트롤의 내부를 클릭합니다.
MTPS Content Service에서 정보가 다운로드되어 콘텐츠 컨트롤 내부에 표시됩니다.