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


Пошаговое руководство. Привязка данных к элементам управления на панели действий Word

В этом пошаговом руководстве демонстрируется привязка данных к элементам управления на панели действий в Word. Элементы управления показывают отношение «Основной/подробности» между таблицами в базе данных SQL Server.

Область применения. Сведения в этом разделе относятся к проектам уровня документа для Word. Дополнительные сведения см. в разделе "Функции", доступные по Приложение Office ликации и типу проекта.

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

  • Создание области действий с элементами управления Windows Forms, привязанными к данным.

  • Использование главного или подробного отношения для отображения данных в элементах управления.

  • Отображение области действий при открытии приложения.

Примечание.

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

Необходимые компоненты

Для выполнения этого пошагового руководства требуются следующие компоненты:

  • Выпуск Visual Studio, включающий инструменты разработчика Microsoft Office. Дополнительные сведения см. в статье "Настройка компьютера для разработки решений Office".

  • Word 2013 или Word 2010.

  • Доступ к серверу с примером базы данных SQL Server Northwind.

  • Разрешения на чтение и запись в базу данных SQL Server.

Создание проекта

Первым шагом является создание документа Word.

Создание проекта

  1. Создайте проект Word Document с именем области "Мои действия Word". В мастере выберите "Создать новый документ".

    Дополнительные сведения см. в статье "Практическое руководство. Создание проектов Office в Visual Studio".

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

Добавление элементов управления в область действий

Для этого пошагового руководства вам потребуется элемент управления области действий, содержащий элементы управления Windows Forms с привязкой к данным. Добавьте источник данных в проект и перетащите элементы управления из окна "Источники данных" в область действий.

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

  1. Выберите проект области действий "Мои слова" в Обозреватель решений.

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

  3. В диалоговом окне "Добавить новый элемент" выберите элемент управления "Области действий", назовите его ActionsControl и нажмите кнопку "Добавить".

Добавление источника данных в проект

  1. Если окно "Источники данных" не отображается, отобразите его в строке меню, выбрав "Просмотреть>другие источники данных Windows>".

    Примечание.

    Если отображение источников данных недоступно, щелкните документ Word и снова проверка.

  2. Нажмите кнопку "Добавить новый источник данных", чтобы запустить мастер настройки источника данных.

  3. Выберите "База данных " и нажмите кнопку "Далее".

  4. Выберите подключение к образцу базы данных SQL Server Northwind или добавьте новое подключение с помощью кнопки "Создать Подключение".

  5. Нажмите кнопку Далее.

  6. Снимите флажок, чтобы сохранить подключение, если оно выбрано, и нажмите кнопку "Далее".

  7. Разверните узел "Таблицы" в окне объектов базы данных.

  8. Выберите поле проверка рядом с таблицами "Поставщики и продукты".

  9. Нажмите кнопку Готово.

    Мастер добавляет таблицу "Поставщики " и "Продукты " в окно "Источники данных". Он также добавляет типизированный набор данных в проект, который отображается в Обозреватель решений.

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

  1. В окне "Источники данных" разверните таблицу "Поставщики".

  2. Щелкните стрелку раскрывающегося списка на узле "Имя компании" и выберите ComboBox.

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

    Элемент управления "Область действий" ComboBox создается на панели действий. В то же время именованный BindingSource SuppliersBindingSourceадаптер таблицы и объект DataSet добавляются в проект в области компонентов.

  4. Выберите SuppliersBindingNavigator в области компонентов и нажмите клавишу DELETE. Вы не будете использовать этот пошаговое SuppliersBindingNavigator руководство.

    Примечание.

    Удаление SuppliersBindingNavigator не удаляет весь код, созданный для него. Этот код можно удалить.

  5. Переместите поле со списком, чтобы оно было под меткой и измените свойство Size на 171, 21.

  6. В окне источников данных разверните таблицу Products, которая является дочерним элементом таблицы "Поставщики".

  7. Щелкните стрелку раскрывающегося списка на узле ProductName и выберите ListBox.

  8. Перетащите ProductName в элемент управления области действий.

    Элемент управления "Область действий" ListBox создается на панели действий. В то же время в проект в области компонентов добавляются именованный BindingSource ProductBindingSource и табличный адаптер.

  9. Переместите поле списка, чтобы оно было под меткой и измените свойство Size на 171 95.

  10. Перетащите фигуру Button из панели элементов в элемент управления "Действия" и поместите ее под полем списка.

  11. Щелкните правой кнопкой мыши Buttonпункт "Свойства" в контекстном меню и измените следующие свойства.

    Свойство Значение
    Имя Insert
    Text Insert
  12. Измените размер пользовательского элемента управления, чтобы он соответствовал элементам управления.

Настройка источника данных.

Чтобы настроить источник данных, добавьте код Load в событие элемента управления области действий, чтобы заполнить элемент управления данными из элемента DataTableуправления и задать DataSource DataMember свойства для каждого элемента управления.

Загрузка элемента управления с данными

  1. Load В обработчике ActionsControl событий класса добавьте следующий код.

    private void ActionsControl_Load(object sender, EventArgs e)
    {
        this.suppliersTableAdapter.Fill(this.northwindDataSet.Suppliers);
        this.productsTableAdapter.Fill(this.northwindDataSet.Products);
    }
    
  2. В C#необходимо подключить обработчик событий к событию Load . Этот код можно поместить в ActionsControl конструктор после вызова InitializeComponent. Дополнительные сведения о создании обработчиков событий см. в статье "Практическое руководство. Создание обработчиков событий в проектах Office".

    this.Load += new EventHandler(ActionsControl_Load);
    

Задание свойств привязки данных элементов управления

  1. Выберите элемент управления CompanyNameComboBox.

  2. В окне "Свойства" нажмите кнопку справа от свойства DataSource и выберите поставщиковBindingSource.

  3. Нажмите кнопку справа от свойства DisplayMember и выберите CompanyName.

  4. Разверните свойство DataBindings, нажмите кнопку справа от свойства Text и выберите None.

  5. Выберите элемент управления ProductNameListBox.

  6. В окне "Свойства" нажмите кнопку справа от свойства DataSource и выберите productsBindingSource.

  7. Нажмите кнопку справа от свойства DisplayMember и выберите ProductName.

  8. Разверните свойство DataBindings, нажмите кнопку справа от свойства SelectedValue и выберите None.

Добавление метода вставки данных в таблицу

Следующая задача — считывать данные из связанных элементов управления и заполнять таблицу в документе 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 события кнопки. Этот код можно поместить в Load обработчик ActionsControl событий класса.

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

Отображение области действий

Область действий становится видимой после добавления элементов управления в нее.

Отображение области действий

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

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

    private ActionsControl actions = new ActionsControl();
    
  3. Добавьте код в Startup обработчик ThisDocument событий, чтобы он выглядел следующим образом.

    this.ActionsPane.Controls.Add(actions);
    

Тестирование приложения

Теперь вы можете протестировать документ, чтобы убедиться, что область действий отображается при открытии документа. Проверьте связь master/detail в элементах управления на панели действий и убедитесь, что данные заполняются в таблице Word при нажатии кнопки "Вставка ".

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

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

  2. Убедитесь, что область действий отображается.

  3. Выберите компанию в поле со списком и убедитесь, что элементы в списке "Продукты ".

  4. Выберите продукт, нажмите кнопку "Вставить " на панели действий и убедитесь, что сведения о продукте добавлены в таблицу в Word.

  5. Вставка дополнительных продуктов из различных компаний.

Следующие шаги

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