演练:在应用程序级项目中绑定到服务中的数据

更新: 2008 年 7 月

适用于

本主题中的信息仅适用于指定的 Visual Studio Tools for Office 项目和 Microsoft Office 版本。

项目类型

  • 应用程序级项目

Microsoft Office 版本

  • Word 2007

有关更多信息,请参见按应用程序和项目类型提供的功能

从 Visual Studio 2008 Service Pack 1 (SP1) 开始,您可以在应用程序级项目中将数据绑定到宿主控件。本演练演示如何在运行时将控件添加到 Microsoft Office Word 文档中、将控件绑定到从 MSDN Content Service 检索到的数据以及响应事件。

本演练演示以下任务:

Cc668204.alert_note(zh-cn,VS.90).gif说明:

对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您使用的 Visual Studio 版本及设置。有关更多信息,请参见Visual Studio 设置

先决条件

您需要以下组件来完成本演练:

  • Visual Studio Tools for Office(Visual Studio 2008 专业版 和 Visual Studio Team System 的可选组件)。

    默认情况下,Visual Studio Tools for Office 随列出的 Visual Studio 版本一起安装。若要检查它是否已安装,请参见安装 Visual Studio Tools for Office

  • Word 2007。

创建新项目

第一步是创建 Word 外接程序项目。

创建新项目

  • 使用 Visual Basic 或 C# 创建一个名为“MSDN Content Service”的“Word 2007 外接程序”项目。

    有关更多信息,请参见如何:创建 Visual Studio Tools for Office 项目

    Visual Studio 会打开 ThisAddIn.vb 或 ThisAddIn.cs 文件并将项目添加到“解决方案资源管理器”中。

添加 Web 服务

对于本演练,请使用称为 MSDN Content Service 的 Web 服务。此 Web 服务以 XML 字符串或纯文本的形式返回指定 MSDN 文章中的信息。下一步演示如何在内容控件中显示返回的信息。

将 MSDN Content Service 添加到项目中

  1. 在“数据”菜单上单击“添加新数据源”。

  2. 在“数据源配置向导”中单击“服务”,再单击“下一步”。

  3. 在“地址”字段中键入下面的 URL:

    http://services.msdn.microsoft.com/ContentServices/ContentService.asmx

  4. 单击“转到”。

  5. 在“命名空间”字段中键入 ContentService,再单击“确定”。

  6. 在“添加引用向导”对话框中单击“完成”。

在运行时添加内容控件并绑定到数据

在应用程序级项目中,在运行时添加和绑定控件。对于本演练,请将内容控件配置为当用户在内容控件内单击时检索 Web 服务中的数据。

添加内容控件并绑定到数据

  1. 在 ThisAddIn 类中,分别为 MSDN 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;
    
  2. 将下面的方法添加到 ThisAddIn 类中。此方法会在活动文档的开始处创建一个内容控件。

    Private Sub AddRichTextControlAtRange()
    
        Dim currentDocument As Word.Document = Me.Application.ActiveDocument
        currentDocument.Paragraphs(1).Range.InsertParagraphBefore()
    
        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();
    
        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.";
    }
    
  3. 将下面的方法添加到 ThisAddIn 类中。此方法会初始化需要创建的对象并向 Web 服务发送一个请求。

    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);
    
    }
    
  4. 创建一个事件处理程序,当用户在内容控件内单击时检索有关内容控件的 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);
    }
    
  5. 从 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 +=
            new EventHandler<ContentControlEnteringEventArgs>
                (richTextContentControl_Entering);
    }
    

测试外接程序

打开 Word 后,RichTextContentControl 控件会随即显示。当在该控件内单击时,该控件中的文本会发生变化。

测试外接程序

  1. 按“F5”。

  2. 在内容控件内单击。

    随即从 MSDN Content Service 下载信息并将信息显示在内容控件中。

请参见

概念

将数据绑定到控件

修订记录

日期

修订历史记录

原因

2008 年 7 月

新增主题。

SP1 功能更改。