Пошаговое руководство. Привязка данных к элементам управления в панели действий Word
Обновлен: Ноябрь 2007
Применение |
---|
Сведения, приведенные в данном разделе, относятся только к указанным проектам Visual Studio Tools for Office и версиям Microsoft Office. Тип проекта
Версия Microsoft Office
Дополнительные сведения см. в разделе Доступность функций по типам приложений и проектов. |
В этом пошаговом руководстве демонстрируется привязка данных к элементам управления в панели действий Microsoft Office Word. Эти элементы управления отражают отношение "общее/подробное" между таблицами в базе данных SQL Server.
В данном пошаговом руководстве проиллюстрированы перечисленные далее задачи:
создание панели действий с элементами управления Windows Forms, которые привязаны к данным;
использование связи "основной/подробности" для отображения данных в элементах управления;
отображение панели действий при открытии приложения.
Примечание. |
---|
На компьютере могут отображаться имена или расположения некоторых элементов пользовательского интерфейса Visual Studio, отличающиеся от указанных в дальнейших инструкциях. Эти элементы определяются используемой версией Visual Studio и ее параметрами. Дополнительные сведения см. в разделе Параметры Visual Studio. |
Обязательные компоненты
Для выполнения инструкций данного пошагового руководства необходимы следующие компоненты:
Visual Studio Tools for Office (необязательный компонент Visual Studio 2008 Professional и Visual Studio Team System);
Microsoft Office Word 2003 или Microsoft Office Word 2007;
доступ к серверу с примером базы данных "Northwind" SQL Server;
разрешения на чтение из базы данных SQL Server и запись в нее.
Visual Studio Tools for Office устанавливается по умолчанию с перечисленными версиями Visual Studio. Чтобы проверить, установлен ли данный пакет инструментов, см. раздел Установка средств Visual Studio для Office.
Создание проекта
Для начала следует создать проект документа Word.
Создание нового проекта
Создайте проект документа Word с именем Панель действий Word. Выберите в мастере Создать новый документ.
Дополнительные сведения см. в разделе Практическое руководство. Создание проектов Visual Studio Tools for Office.
Visual Studio откроет новый документ Word в режиме конструктора и добавит проект Панель действий Word в Обозреватель решений.
Добавление элементов управления на панель действий
Для выполнения данного пошагового руководства необходим элемент управления панели действий, содержащий элементы управления Windows Forms, которые привязаны к данным. Добавьте в проект источник данных и затем перетащите элементы управления из окна Источники данных в элемент управления панели данных.
Добавление элемента управления панели действий
Выберите в Обозревателе решений проект Панель действий Word.
В меню Проект выберите команду Добавить новый элемент.
В диалоговом окне Добавление нового элемента выберите Элемент управления панели действий, присвойте файлу имя ActionsControl и нажмите кнопку Добавить.
Добавление в проект нового источника данных
Если окно Источники данных не отображается, в меню Данные выберите пункт Показать источники данных.
Примечание. Если пункт Показать источники данных недоступен, щелкните документ Word и попробуйте снова.
Выберите команду Добавить новый источник данных, чтобы запустить Мастер настройки источника данных.
Выберите База данных и нажмите Далее.
Выберите подключение к базе данных SQL Server "Northwind" или добавьте новое подключение с помощью кнопки Новое подключение.
Нажмите кнопку Далее.
Чтобы сохранить подключение, снимите флажок (если он установлен) и нажмите кнопку Далее.
В окне Объекты базы данных разверните узел Таблицы.
Установите флажки возле таблиц Поставщики и Продукты.
Нажмите кнопку Готово.
Мастер добавит таблицы Поставщики и Продукты в окно Источники данных. Также к проекту добавляется типизированный набор данных, который отображается в Обозревателе решений.
Добавление привязанных к данным элементов управления Windows Forms в элемент управления панели действий
Разверните таблицу Поставщики в окне Источники данных.
Щелкните стрелку вниз на узле Название компании и выберите пункт ComboBox.
Из окна Источники данных перетащите узел CompanyName на элемент управления панели действий.
На элементе управления панели действий создается элемент управления ComboBox. Одновременно в область компонентов проекта добавляются элемент управления BindingSource с именем SuppliersBindingSource, адаптер таблиц и экземпляр класса DataSet.
В области Компоненты выберите объект SuppliersBindingNavigator и нажмите клавишу DELETE. В данном примере объект SuppliersBindingNavigator использоваться не будет.
Примечание. При удалении объекта SuppliersBindingNavigator код, созданный для него, не удаляется. Этот код можно удалить.
Перетащите поле со списком под метку и присвойте свойству Size значение 171, 21.
В окне Источники данных разверните таблицу Продукты, являющуюся дочерней таблицей таблицы Поставщики.
Щелкните стрелку вниз на узле ProductName и выберите пункт ListBox.
Перетащите ProductName на элемент управления панели действий.
На элементе управления панели действий создается элемент управления ListBox. Одновременно в область компонентов проекта добавляются элемент управления BindingSource с именем ProductBindingSource и адаптер таблиц.
Перетащите поле списка под метку и присвойте свойству Size значение 171, 95.
Перетащите из Панели элементов экземпляр Button на элемент управления панели действий и поместите его под полем списка.
Щелкните правой кнопкой мыши элемент управления Button, выберите в контекстном меню пункт Свойства и измените следующие свойства:
Свойство
Значение
Name
Insert
Text
Вставить
Измените размер пользовательского элемента управления в соответствии с размерами элементов управления.
Настройка источника данных
Чтобы настроить источник данных, добавьте код в обработчик событий Load элемента управления панели действий для заполнения элемента управления данными из объекта DataTable, а также задайте свойства DataSource и DataMember для каждого элемента управления.
Заполнение элемента управления данными
Добавьте следующий код в обработчик событий Load класса ActionsControl:
Private Sub ActionsControl_Load(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles Me.Load Me.SuppliersTableAdapter.Fill(Me.NorthwindDataSet.Suppliers) Me.ProductsTableAdapter.Fill(Me.NorthwindDataSet.Products) End Sub
private void ActionsControl_Load(object sender, EventArgs e) { this.suppliersTableAdapter.Fill(this.northwindDataSet.Suppliers); this.productsTableAdapter.Fill(this.northwindDataSet.Products); }
В C# следует присоединить обработчик событий к событию Load. Этот код можно поместить в конструктор ActionsControl после обращения к InitializeComponent. Дополнительные сведения о создании обработчиков событий см. в разделе Практическое руководство. Создание обработчиков событий в пакете инструментов Visual Studio для Office.
this.Load += new EventHandler(ActionsControl_Load);
Установка свойств привязки данных элементов управления
Выберите элемент управления CompanyNameComboBox.
В окне Свойства нажмите кнопку справа от свойства DataSource и выберите suppliersBindingSource.
Нажмите кнопку справа от свойства DisplayMember и выберите CompanyName.
Разверните свойство DataBindings, нажмите кнопку справа от свойства Text и выберите None.
Выберите элемент управления ProductNameListBox.
В окне Свойства нажмите кнопку справа от свойства DataSource и выберите productsBindingSource.
Нажмите кнопку справа от свойства DisplayMember и выберите ProductName.
Разверните свойство DataBindings, нажмите кнопку справа от свойства SelectedValue и выберите None.
Добавление метода для вставки данных в таблицу
Следующей задачей является чтение данных из связанных элементов управления и заполнение таблицы в документе Word. Сперва следует создать процедуру для форматирования заголовков таблицы, а затем добавить метод AddData для создания и форматирования таблицы Word.
Форматирование заголовков таблицы
В классе ActionsControl создайте метод для форматирования заголовков таблицы.
Shared Sub SetHeadings(ByVal tblCell As Word.Cell, ByVal text As String) With tblCell.Range .Text = text .Font.Bold = True .ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter End With End Sub
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; }
Создание таблицы
В классе ActionsControl создайте метод для создания таблицы, если она еще не создана, и добавления в нее данных из панели действий.
Private Sub AddData(ByVal row As System.Data.DataRow, ByVal companyName As String) ' Create a table if it doesn't already exist. If Globals.ThisDocument.Tables.Count = 0 Then Try ' Create a table. Dim tbl As Word.Table = Globals.ThisDocument.Tables.Add( _ Globals.ThisDocument.Application.Selection.Range, 1, 4) ' 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 ex As Exception MessageBox.Show("Problem creating Products table: " & ex.Message, _ "Actions Pane", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End If ' Add data from data row to the table. Dim selection As Word.Selection = Globals.ThisDocument.Application.Selection If selection.Tables.Count > 0 Then Dim newRow As Word.Row = Globals.ThisDocument.Tables(1).Rows.Add() With newRow .Range.Font.Bold = False .Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft .Cells(4).Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight .Cells(1).Range.Text = companyName .Cells(2).Range.Text = row.Item("ProductName").ToString .Cells(3).Range.Text = row.Item("QuantityPerUnit").ToString .Cells(4).Range.Text = Math.Round(row.Item("UnitPrice"), 2) End With Else MessageBox.Show("Cursor must be within a table.", _ "Actions Pane", MessageBoxButtons.OK, MessageBoxIcon.Error) End If End Sub
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
В обработчик событий Click кнопки Insert добавьте следующий код:
Private Sub Insert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Insert.Click Dim tbl As System.Data.DataTable = NorthwindDataSet.Products Dim rows() As System.Data.DataRow ' Check if a product is selected. If Not Me.ProductNameListBox.SelectedIndex < 0 Then Dim product As String = Me.ProductNameListBox.SelectedItem.Row.Item("ProductName") Dim company As String = Me.CompanyNameComboBox.Text ' Return the data row from the selected Product in the list box. rows = tbl.Select("[ProductName] = '" & product.Replace("'", "''") & "'") AddData(rows(0), company) Else MessageBox.Show("Please select a product.", "Actions Pane", MessageBoxButtons.OK) End If End Sub
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); } }
В C# необходимо создать обработчик событий Click кнопки. Этот код можно поместить в обработчик событий Load класса ActionsControl.
this.Insert.Click += new EventHandler(Insert_Click);
Отображение панели действий
Панель действий отображается после добавления на нее элементов управления.
Отображение панели действий
В Обозревателе решений щелкните правой кнопкой мыши ThisDocument.vb или ThisDocument.cs и выберите в контекстном меню команду Перейти к коду.
Создайте новый экземпляр элемента управления в начале класса ThisDocument, как показано в следующем примере:
Dim actions As New ActionsControl
private ActionsControl actions = new ActionsControl();
Добавьте код в обработчик событий Startup класса ThisDocument, чтобы он выглядел следующим образом:
Me.ActionsPane.Controls.Add(actions)
this.ActionsPane.Controls.Add(actions);
Проверка работы приложения
Теперь можно протестировать документ, чтобы проверить, что при его открытии отображается панель действий. Проверьте отношение "основной/подробности" в элементах управления в панели действий и убедитесь, что таблица Word заполняется данными при нажатии кнопки Вставить.
Проверка документа
Нажмите клавишу F5 для запуска проекта.
Убедитесь, что панель действий отображается.
Выберите название компании в поле со списком и убедитесь, что содержимое списка Продукты изменяется.
Выберите название продукта, нажмите кнопку Вставить в панели действий и убедитесь, что в таблицу Word добавляются сведения о продукте.
Добавьте продукты от различных компаний.
Следующие действия
В этом пошаговом руководстве рассматриваются основные принципы привязки данных к элементам управления в панели действий Microsoft Office Word. Далее будут рассмотрены следующие задачи:
Развертывание проекта. Дополнительные сведения см. в разделе Практическое руководство. Развертывание решений Office (система 2003).
Привязка данных к элементам управления в Excel. Дополнительные сведения см. в разделе Пошаговое руководство. Привязка данных к элементам управления в панели действий Excel.
Отображение и скрытие элементов управления в панели действий. Дополнительные сведения см. в разделе Пошаговое руководство. Изменение панели действий в зависимости от контекста пользователя.
См. также
Задачи
Практическое руководство. Добавление панели действий в документы Word