Поделиться через


Пошаговое руководство. Привязка элементов управления содержимым к пользовательским XML-частям

Обновлен: Ноябрь 2007

Применение

Сведения в данном разделе относятся только к указанным проектам Visual Studio Tools for Office и версиям приложений Microsoft Office.

Тип проекта

  • Проекты уровня документа

Версия Microsoft Office

  • Word 2007

Дополнительные сведения см. в разделе Доступность функций по типам приложений и проектов.

В данном пошаговом руководстве описаны способы привязки элементов управления содержимым в настройках на уровне документа Word 2007 к данным XML, хранящимся в документе.

Word 2007 позволяет хранить данные XML, называемые пользовательской XML-частью в документе. Можно управлять отображением этих данных с помощью привязки элементов управления к элементам в пользовательской XML-части. Пример документа в этом руководства отображает данные о сотрудниках, которые хранятся в пользовательской XML-части. При открытии документа элементы управления содержимым отображают значения XML-элементов. Все изменения текста в элементах управления содержимым сохраняются в пользовательской XML-части.

В данном пошаговом руководстве рассмотрены следующие задачи:

  • Добавление элементов управления содержимым в документ Word в проекте уровня документа во время разработки.

  • Создание файла данных XML и схемы XML, определяющей элементы, которые необходимо привязать к элементам управления содержимым.

  • Прикрепление схемы XML к документу во время разработки.

  • Добавление содержимого файла XML к пользовательской XML-части в документе во время выполнения.

  • Привязка элементов управления содержимым к элементам пользовательской XML-части.

  • Привязка элемента управления DropDownListContentControl к набору значений, заданных в схеме XML.

Bb398244.alert_note(ru-ru,VS.90).gifПримечание.

На вашем компьютере названия некоторых элементов интерфейса пользователя Visual Studio или их расположение могут отличаться от указанных в нижеследующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Параметры Visual Studio.

Обязательные компоненты

Ниже приведены компоненты, необходимые для выполнения данного пошагового руководства.

  • Visual Studio Tools for Office (необязательный компонент Visual Studio 2008 Professional и Visual Studio Team System).

  • Microsoft Office Word 2007.

Средства Visual Studio Tools for Office по умолчанию устанавливаются с перечисленными версиями Visual Studio. Чтобы проверить, установлены ли эти средства, см. раздел Установка средств Visual Studio для Office.

Создание нового проекта документа Word

Создайте документ Word 2007, который будет использоваться в пошаговом руководстве.

Создание нового проекта документа Word 2007

  • Создайте проект документа Word с именем EmployeeControls, используя шаблон проекта документа Word для Microsoft Office 2007. Создайте новый документ для решения. Дополнительные сведения см. в разделе Практическое руководство. Создание проектов Visual Studio Tools for Office.

    Среда Visual Studio откроет новый документ Word в режиме конструктора и добавит проект EmployeeControls в Обозреватель решений.

Добавление элементов управления содержимым к документу Word

Создайте таблицу, содержащую три различных типа элементов управления содержимым, в которых пользователь сможет просматривать или редактировать данные о сотруднике.

Добавление элементов управления содержимым к документу

  1. В документе Word, который размещен в конструкторе Visual Studio, на ленте, щелкните вкладку Вставить.

  2. В группе Таблицы нажмите кнопку Таблица и вставьте таблицу с 2 столбцами и 3 строками.

  3. Введите текст в первом столбце, как показано ниже.

    Имя сотрудника

    Дата приема на работу

    Название

  4. Во втором столбце таблицы щелкните первую строку (после текста Имя сотрудника).

  5. В ленте щелкните вкладку Разработчик.

    Bb398244.alert_note(ru-ru,VS.90).gifПримечание.

    Если вкладка Разработчик не отображается в ленте, то сначала следует ее отобразить. Дополнительные сведения см. в разделе Практическое руководство. Отображение вкладки разработчика на ленте.

  6. В группе Элементы управления нажмите кнопку ТекстPlainTextContentControl, чтобы добавить элемент управления PlainTextContentControl в первую ячейку.

  7. Во втором столбце таблицы щелкните вторую строку (после текста Дата приема на работу).

  8. В группе Элементы управления нажмите кнопку Выбор датыDatePickerContentControl, чтобы добавить элемент управления DatePickerContentControl во вторую ячейку.

  9. Во втором столбце таблицы щелкните третью строку (после текста Должность).

  10. В группе Элементы управления нажмите кнопку Раскрывающийся списокDropDownListContentControl, чтобы добавить элемент управления DropDownListContentControl в последнюю ячейку.

Это и будет весь интерфейс пользователя для данного проекта. Если запустить проект сейчас, то можно будет ввести текст в первой строке и выбрать дату во второй. Следующий шаг — прикрепление данных, которые необходимо отобразить в документе, к файлу XML.

Создание файла данных XML.

Как правило, данные XML для хранения в настраиваемой XML-части получаются из внешнего источника, например, из фала или базы данных. В ходе данного пошагового руководства будет создан файл данных XML, содержащий данные о сотруднике, помеченные элементами, которые необходимо привязать к элементам управления содержимым в документе. Чтобы обеспечить доступ к данным во время выполнения, следует включить файл XML в сборку ресурсов настройки в качестве ресурса.

Создание файла данных

  1. В меню Проект выберите команду Добавить новый элемент.

    Откроется диалоговое окно Добавление нового элемента.

  2. Затем в области Шаблоны выберите XML-файл.

  3. Присвойте файлу имя employees.xml и выберите команду Добавить.

    В редакторе кода открывается файл employees.xml.

  4. Замените содержимое файла employees.xml следующим текстом.

    <?xml version="1.0" encoding="utf-8" ?>
    <employees xmlns="https://schemas.microsoft.com/vsto/samples">
      <employee>
        <name>Karina Leal</name>
        <hireDate>1999-04-01</hireDate>
        <title>Manager</title>
      </employee>
    </employees>
    
  5. Щелкните файл employees.xml в Обозревателе решений.

  6. В окне Свойства выберите свойство Действие при построении и измените его значение на Внедренный ресурс.

    На этом шаге XML-файл внедряется в сборку как ресурс при построении проекта. Это позволяет получить доступ к содержимому XML-файла во время выполнения.

Создание схемы XML

Чтобы привязать элемент управления содержимым к одному элементу в пользовательской XML-части, необязательно использовать схему XML. Но чтобы связать элемент управления DropDownListContentControl с набором значений, необходимо создать схему XML, проверяющую файл данных XML, созданный ранее. Схема XML задает возможные значения для элемента title. В данном пошаговом руководстве DropDownListContentControl будет привязан к этому элементу позднее.

Создание схемы XML

  1. В меню Проект выберите команду Добавить новый элемент.

    Открывается диалоговое окно Добавление нового элемента.

  2. Затем в области Шаблоны выберите Схема XML.

  3. Назовите схему employees.xsd и нажмите кнопку Добавить.

    Откроется окно конструктора схемы.

  4. В Обозревателе решений щелкните правой клавишей мыши employees.xsd, а затем выберите команду Просмотреть код.

  5. Замените содержимое файла employees.xsd следующей схемой.

    <?xml version="1.0" encoding="utf-8" ?>
    <xs:schema xmlns="https://schemas.microsoft.com/vsto/samples" 
        targetNamespace="https://schemas.microsoft.com/vsto/samples"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        elementFormDefault="qualified">
      <xs:element name="employees" type="EmployeesType"></xs:element>
      <xs:complexType name="EmployeesType">
        <xs:all>
          <xs:element name="employee" type="EmployeeType"/>
        </xs:all>
      </xs:complexType>
      <xs:complexType name="EmployeeType">
        <xs:sequence>
          <xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1"/>
          <xs:element name="hireDate" type="xs:date" minOccurs="1" maxOccurs="1"/>
          <xs:element name="title" type="TitleType" minOccurs="1" maxOccurs="1"/>
        </xs:sequence>
      </xs:complexType>
      <xs:simpleType name="TitleType">
        <xs:restriction base="xs:string">
          <xs:enumeration value ="Engineer"/>
          <xs:enumeration value ="Designer"/>
          <xs:enumeration value ="Manager"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:schema>
    
  6. Чтобы сохранить файл employees.xml и employees.xsd, в меню Файл выберите команду Сохранить все.

Прикрепление схемы XML к документу

Необходимо прикрепить схему XML к документу, чтобы привязать элемент управления DropDownListContentControl к корректным значениям элемента title.

Прикрепление схемы XML к документу

  1. Активируйте файл EmployeeControls.docx в конструкторе.

  2. В ленте щелкните вкладку Разработчик.

  3. В группе XML нажмите кнопку Схема.

  4. В диалоговом окне Шаблоны и надстройки перейдите на вкладку Схема XML и выберите Добавление схемы.

  5. Найдите схему employees.xsd, созданную ранее и расположенную в папке проекта, и нажмите Открыть.

  6. В диалоговом окне Параметры схемы нажмите кнопку ОК.

  7. Нажмите кнопку ОК, чтобы закрыть диалоговое окно Шаблоны и надстройки.

    Открывается область задач Структура ХML.

  8. Закройте область задач Структура ХML.

Добавление пользовательской XML-части к документу

Перед привязкой элементов управления содержимым к элементам XML-файла необходимо добавить его содержимое к новой пользовательской XML-части в документе.

Добавление пользовательской XML-части к документу

  1. В Обозревателе решений щелкните правой кнопкой мыши файл ThisDocument.cs или ThisDocument.vb, а затем нажмите Просмотреть код.

  2. Добавьте в класс ThisDocument следующие объявления. В этом коде объявляются несколько объектов, используемые для добавления пользовательской XML-части к документу.

    <Cached()> _
    Public employeeXMLPartID As String = String.Empty
    Private employeeXMLPart As Office.CustomXMLPart
    Private Const prefix As String = "xmlns:ns='https://schemas.microsoft.com/vsto/samples'"
    
    [CachedAttribute()]
    public string employeeXMLPartID = string.Empty;
    private Office.CustomXMLPart employeeXMLPart;
    private const string prefix = "xmlns:ns='https://schemas.microsoft.com/vsto/samples'";
    
  3. Добавьте следующий метод в класс ThisDocument. Этот метод получает содержимое файла данных XML, внедренного как ресурс в сборку, и возвращает содержимое в виде строки XML.

    Private Function GetXmlFromResource() As String
        Dim asm As System.Reflection.Assembly = _
            System.Reflection.Assembly.GetExecutingAssembly()
        Dim stream1 As System.IO.Stream = asm.GetManifestResourceStream( _
                "EmployeeControls.employees.xml")
    
        Using resourceReader As System.IO.StreamReader = _
            New System.IO.StreamReader(stream1)
            If resourceReader IsNot Nothing Then
                Return resourceReader.ReadToEnd()
            End If
        End Using
    
        Return Nothing
    End Function
    
    private string GetXmlFromResource()
    {
        System.Reflection.Assembly asm =
            System.Reflection.Assembly.GetExecutingAssembly();
        System.IO.Stream stream1 = asm.GetManifestResourceStream(
            "EmployeeControls.employees.xml");
    
        using (System.IO.StreamReader resourceReader =
                new System.IO.StreamReader(stream1))
        {
            if (resourceReader != null)
            {
                return resourceReader.ReadToEnd();
            }
        }
    
        return null;
    }
    
  4. Добавьте следующий метод в класс ThisDocument. Метод AddCustomXmlPart создает новую пользовательскую XML-часть, содержащую XML-строку, которая передается в метод.

    Чтобы убедиться, что пользовательская XML-часть создается только один раз, метод создает пользовательскую XML-часть только, если такая часть с соответствующим идентификатором GUID еще не существует в документе. При первом вызове этого метода значение свойства Microsoft.Office.Interop.Word.CustomXMLPart.Id сохраняется в строке employeeXMLPartID. Значение строки employeeXMLPartID сохраняется в документе, потому что она была объявлена с помощью атрибута CachedAttribute.

    Private Sub AddCustomXmlPart(ByVal xmlData As String)
        If xmlData IsNot Nothing Then
    
            employeeXMLPart = Me.CustomXMLParts.SelectByID(employeeXMLPartID)
            If (employeeXMLPart Is Nothing) Then
                employeeXMLPart = Me.CustomXMLParts.Add(xmlData)
                employeeXMLPart.NamespaceManager.AddNamespace("ns", _
                    "https://schemas.microsoft.com/vsto/samples")
                employeeXMLPartID = employeeXMLPart.Id
            End If
        End If
    End Sub
    
    private void AddCustomXmlPart(string xmlData)
    {
        if (xmlData != null)
        {
            employeeXMLPart = this.CustomXMLParts.SelectByID(employeeXMLPartID);
            if (employeeXMLPart == null)
            {
                employeeXMLPart = this.CustomXMLParts.Add(xmlData, missing);
                employeeXMLPart.NamespaceManager.AddNamespace("ns", 
                    @"https://schemas.microsoft.com/vsto/samples");
                employeeXMLPartID = employeeXMLPart.Id;
            }
        }
    }
    

Привязка элементов управления содержимым к элементам пользовательской XML-части

Привяжите все элементы управления содержимым к элементу в пользовательской XML-части, используя свойство XMLMapping каждого элемента управления.

Привязка элементов управления содержимым к элементам пользовательской XML-части

  • Добавьте следующий метод в класс ThisDocument. Этот метод привязывает каждый элемент управления содержимым к элементу в пользовательской XML-части и задает формат отображения даты элемента управления DatePickerContentControl.

    Private Sub BindControlsToCustomXmlPart()
        Dim xPathName As String = "ns:employees/ns:employee/ns:name"
        Me.PlainTextContentControl1.XMLMapping.SetMapping(xPathName, _
            prefix, employeeXMLPart)
    
        Dim xPathDate As String = "ns:employees/ns:employee/ns:hireDate"
        Me.DatePickerContentControl1.DateDisplayFormat = "MMMM d, yyyy"
        Me.DatePickerContentControl1.XMLMapping.SetMapping(xPathDate, _
            prefix, employeeXMLPart)
    
        Dim xPathTitle As String = "ns:employees/ns:employee/ns:title"
        Me.DropDownListContentControl1.XMLMapping.SetMapping(xPathTitle, _
            prefix, employeeXMLPart)
    End Sub
    
    private void BindControlsToCustomXmlPart()
    {
        string xPathName = "ns:employees/ns:employee/ns:name";
        this.plainTextContentControl1.XMLMapping.SetMapping(xPathName,
            prefix, employeeXMLPart);
    
        string xPathDate = "ns:employees/ns:employee/ns:hireDate";
        this.datePickerContentControl1.DateDisplayFormat = "MMMM d, yyyy";
        this.datePickerContentControl1.XMLMapping.SetMapping(xPathDate,
            prefix, employeeXMLPart);
    
        string xPathTitle = "ns:employees/ns:employee/ns:title";
        this.dropDownListContentControl1.XMLMapping.SetMapping(xPathTitle,
            prefix, employeeXMLPart);
    }
    

Запуск кода при открытии документа

Создайте пользовательскую XML-часть и привяжите пользовательские элементы управления к данным при открытии документа.

Запуск кода при открытии документа

  • Добавьте в метод ThisDocument_Startup класса ThisDocument следующий код. Этот код получает строку XML из файла employees.xml, добавляет строку XML к новой пользовательской XML-части в документе и привязывает элементы управления содержимым к элементам в пользовательской XML-части.

    Dim xmlData As String = GetXmlFromResource()
    If xmlData IsNot Nothing Then
        AddCustomXmlPart(xmlData)
        BindControlsToCustomXmlPart()
    End If
    
    string xmlData = GetXmlFromResource();
    
    if (xmlData != null)
    {
        AddCustomXmlPart(xmlData);
        BindControlsToCustomXmlPart();
    }
    

Тестирование проекта

При открытии документа элементы управления содержимым отображают данные элементов пользовательской XML-части. Можно щелкнуть элемент управления DropDownListContentControl, чтобы выбрать одно из трех корректных значений элемента title, которые определены в файле employees.xsd. При редактировании данных в любом элементе управления содержимым новые значения сохраняются в пользовательской XML-части в документе.

Тестирование элементов управления содержимым

  1. Нажмите клавишу F5 для запуска проекта.

  2. Убедитесь, что таблица в документе соответствует описанной далее таблице. Каждая строка во втором столбце берется из элемента в пользовательской XML-части в документе.

    Имя сотрудника

    Карина Лил

    Дата приема на работу

    1 апреля 1999 г

    Название

    Руководитель

  3. Щелкните ячейку справа от ячейки Имя сотрудника и введите другое имя.

  4. Щелкните ячейку справа от ячейки Должность и выберите другую дату в элементе управления выбора даты.

  5. Щелкните ячейку справа от ячейки Должность и выберите новый элемент из раскрывающегося списка.

  6. Сохраните и закройте документ.

  7. В проводнике откройте папку \bin\Debug, расположенную в проекте.

  8. Щелкните правой кнопкой мыши файл EmployeeControls.docx и выберите пункт Переименовать.

  9. Назовите файл EmployeeControls.docx.zip.

    Документ EmployeeControls.docx сохраняется в формате Open XML. Если добавить к имени документа расширение ZIP-файла, можно изучить содержимое документа. Дополнительные сведения об Open XML Office Open XML см. в статье Основные сведения о формате файлов Open XML.

  10. Дважды щелкните файл EmployeeControls.docx.zip.

  11. Дважды щелкните папку customXml.

  12. Щелкните правой кнопкой мыши item2.xml и выберите пункт Открыть.

    Этот файл содержит пользовательскую XML-часть, добавленную к документу.

  13. Убедитесь, что элементы name, hireDate и title содержат новые значения, введенные в элементах управления содержимым в документе.

  14. Закройте файл item2.xml.

Следующие действия

Дополнительные сведения об использовании элементов управления содержимым см. в следующих разделах:

См. также

Задачи

Практическое руководство. Добавление элементов управления содержимым в документы Word

Практическое руководство. Защита частей документов с помощью элементов управления содержимым

Основные понятия

Элементы управления содержимым

Общие сведения о ведущих элементах и элементах управления ведущего приложения

Программные ограничения ведущих элементов и элементов управления ведущего приложения

Добавление элементов управления в документы Office во время выполнения

Вспомогательные методы для элементов управления ведущего приложения

Другие ресурсы

Элементы управления ведущего приложения Word