Exemplarische Vorgehensweise: Binden von Daten an Steuerelemente in einem Word-Aktionsbereich
Diese exemplarische Vorgehensweise veranschaulicht das Binden von Daten an Steuerelemente in einem Aktionsbereich von Microsoft Office Word. Die Steuerelemente verdeutlichen eine Master/Detail-Beziehung zwischen Tabellen in einer SQL Server-Datenbank.
Betrifft: Die Informationen in diesem Thema betreffen Projekte auf Dokumentebene für Word 2007 und Word 2010. Weitere Informationen finden Sie unter Verfügbare Funktionen nach Office-Anwendung und Projekttyp.
In dieser exemplarischen Vorgehensweise werden die folgenden Aufgaben veranschaulicht:
Erstellen eines Aktionsbereichs mit Windows Forms-Steuerelementen, die an Daten gebunden sind.
Verwenden einer Master/Detail-Beziehung zum Anzeigen von Daten in den Steuerelementen.
Anzeigen des Aktionsbereichs beim Öffnen der Anwendung.
Tipp
Auf Ihrem Computer werden möglicherweise andere Namen oder Speicherorte für die Benutzeroberflächenelemente von Visual Studio angezeigt als die in den folgenden Anweisungen aufgeführten. Die von Ihnen verwendete Visual Studio-Edition und die Einstellungen legen diese Elemente fest. Weitere Informationen finden Sie unter Arbeiten mit Einstellungen.
Vorbereitungsmaßnahmen
Zum Durchführen dieser exemplarischen Vorgehensweise benötigen Sie die folgenden Komponenten:
-
Eine Version von Visual Studio 2010, die die Microsoft Office-Entwicklungstools einschließt. Weitere Informationen finden Sie unter [Konfigurieren eines Computers zum Entwickeln von Office-Lösungen](bb398242\(v=vs.100\).md).
Word 2007 oder Word 2010
Zugriff auf einen Server mit der SQL Server-Beispieldatenbank Northwind.
Lese- und Schreibberechtigungen für die SQL Server-Datenbank.
Erstellen des Projekts
Der erste Schritt besteht darin, ein Word-Dokumentprojekt zu erstellen.
So erstellen Sie ein neues Projekt
Erstellen Sie ein Word-Dokumentprojekt mit dem Namen My Word Actions Pane. Wählen Sie im Assistenten Neues Dokument erstellen aus.
Weitere Informationen finden Sie unter Gewusst wie: Erstellen von Office-Projekten in Visual Studio.
Visual Studio öffnet das neue Word-Dokument im Designer und fügt dem Projektmappen-Explorer das My Word Actions Pane-Projekt hinzu.
Hinzufügen von Steuerelementen zum Aktionsbereich
Für diese exemplarische Vorgehensweise benötigen Sie ein Aktionsbereich-Steuerelement mit datengebundenen Windows Forms-Steuerelementen. Fügen Sie eine Datenquelle zum Projekt hinzu, und ziehen Sie Steuerelemente aus dem Datenquellenfenster in das Aktionsbereich-Steuerelement.
So fügen Sie ein Aktionsbereich-Steuerelement hinzu
Wählen Sie im Projektmappen-Explorer das Projekt My Word Actions Pane aus.
Klicken Sie im Menü Projekt auf Neues Element hinzufügen.
Klicken Sie im Dialogfeld Neues Element hinzufügen auf Aktionsbereich-Steuerelement. Nennen Sie das Steuerelement ActionsControl, und klicken Sie auf Hinzufügen.
So fügen Sie dem Projekt eine neue Datenquelle hinzu
Wenn das Datenquellenfenster nicht sichtbar ist, klicken Sie im Menü Daten auf Datenquellen anzeigen.
Tipp
Wenn Datenquellen anzeigen nicht verfügbar ist, klicken Sie auf das Word-Dokument, und versuchen Sie es dann erneut.
Klicken Sie auf Neue Datenquelle hinzufügen, um den Assistent zum Konfigurieren von Datenquellen zu starten.
Wählen Sie Datenbank aus, und klicken Sie auf Weiter.
Wählen Sie eine Datenverbindung zur Northwind SQL Server-Beispieldatenbank aus, oder fügen Sie mithilfe der Schaltfläche Neue Verbindung eine neue Verbindung hinzu.
Klicken Sie auf Weiter.
Deaktivieren Sie ggf. die Option zum Speichern der Verbindung, und klicken Sie dann auf Weiter.
Erweitern Sie im Fenster Datenbankobjekte den Knoten Tabellen.
Aktivieren Sie die Kontrollkästchen neben der Tabelle Suppliers und der Tabelle Products.
Klicken Sie auf Fertig stellen.
Der Assistent fügt dem Datenquellenfenster die Tabelle Suppliers und die Tabelle Products hinzu. Dem Projekt wird außerdem ein typisiertes Dataset hinzugefügt, das im Projektmappen-Explorer sichtbar ist.
So fügen Sie datengebundene Windows Forms-Steuerelemente zu einem Aktionsbereich-Steuerelement hinzu
Erweitern Sie im Datenquellenfenster die Tabelle Suppliers.
Klicken Sie im Knoten Company Name auf den Dropdownpfeil, und wählen Sie ComboBox.
Ziehen Sie CompanyName aus dem Datenquellenfenster zum Aktionsbereich-Steuerelement.
Im Aktionsbereich-Steuerelement wird ein ComboBox-Steuerelement erstellt. Gleichzeitig werden dem Projekt in der Komponentenleiste eine BindingSource mit dem Namen SuppliersBindingSource, ein Tabellenadapter und ein DataSet hinzugefügt.
Wählen Sie in der Komponentenleiste den Eintrag SuppliersBindingNavigator aus, und drücken Sie ENTF. In dieser exemplarischen Vorgehensweise verwenden Sie SuppliersBindingNavigator nicht.
Tipp
Beim Löschen des SuppliersBindingNavigator wird nicht der gesamte dafür generierte Code gelöscht. Sie können diesen Code entfernen.
Verschieben Sie das Kombinationsfeld unter die Beschriftung, und ändern Sie die Size-Eigenschaft auf 171, 21.
Erweitern Sie im Fenster Datenquellen die Tabelle Products, die ein untergeordnetes Element der Tabelle Suppliers darstellt.
Klicken Sie im Knoten ProductName auf den Dropdownpfeil, und wählen Sie ListBoxaus.
Ziehen Sie ProductName in das Aktionsbereich-Steuerelement.
Im Aktionsbereich-Steuerelement wird ein ListBox-Steuerelement erstellt. Gleichzeitig werden dem Projekt in der Komponentenleiste eine BindingSource mit dem Namen ProductBindingSource und ein Tabellenadapter hinzugefügt.
Verschieben Sie das Listenfeld unter die Beschriftung, und ändern Sie die Size-Eigenschaft auf 171,95.
Ziehen Sie aus der Toolbox eine Button in das Aktionsbereich-Steuerelement, und platzieren Sie diese unter dem Listenfeld.
Klicken Sie mit der rechten Maustaste auf die Button, klicken Sie im Kontextmenü auf Eigenschaften, und ändern Sie die folgenden Eigenschaften:
Eigenschaft
Wert
Name
Insert
Text
Insert
Passen Sie die Größe des Benutzersteuerelements den Steuerelementen entsprechend an.
Einrichten der Datenquelle
Fügen Sie zum Einrichten der Datenquelle dem Load-Ereignis des Aktionsbereich-Steuerelements Code hinzu, damit das Steuerelement mit Daten aus der DataTable aufgefüllt wird, und legen Sie die DataSource-Eigenschaft und die DataMember-Eigenschaft für jedes Steuerelement fest.
So laden Sie das Steuerelement mit Daten
Fügen Sie im Load-Ereignishandler der ActionsControl-Klasse folgenden Code hinzu:
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); }
In C# müssen Sie den Ereignishandler an das Load-Ereignis anfügen. Sie können diesen Code im ActionsControl-Konstruktor nach dem Aufruf von InitializeComponent platzieren. Weitere Informationen zum Erstellen von Ereignishandlern finden Sie unter Gewusst wie: Erstellen von Ereignishandlern in Office-Projekten.
this.Load += new EventHandler(ActionsControl_Load);
So legen Sie die Datenbindungseigenschaften der Steuerelemente fest
Wählen Sie das CompanyNameComboBox-Steuerelement aus.
Klicken Sie im Eigenschaftenfenster auf die Schaltfläche rechts von der DataSource-Eigenschaft, und wählen Sie SuppliersBindingSource aus.
Klicken Sie auf die Schaltfläche rechts von der DisplayMember-Eigenschaft, und wählen Sie CompanyName aus.
Erweitern Sie die DataBindings-Eigenschaft, klicken Sie auf die Schaltfläche rechts von der Text-Eigenschaft, und wählen Sie Keine aus.
Wählen Sie das ProductNameListBox-Steuerelement aus.
Klicken Sie im Eigenschaftenfenster auf die Schaltfläche rechts von der DataSource-Eigenschaft, und wählen Sie productsBindingSource aus.
Klicken Sie auf die Schaltfläche rechts von der DisplayMember-Eigenschaft, und wählen Sie ProductName aus.
Erweitern Sie die DataBindings-Eigenschaft, klicken Sie auf die Schaltfläche rechts von der SelectedValue-Eigenschaft, und wählen Sie Keine aus.
Hinzufügen einer Methode zum Einfügen von Daten in eine Tabelle
Die nächste Aufgabe besteht darin, die Daten von den gebundenen Steuerelementen zu lesen und eine Tabelle im Word-Dokument zu füllen. Zunächst erstellen Sie eine Prozedur zum Formatieren der Tabellenüberschriften und fügen dann die AddData-Methode zum Erstellen und Formatieren einer Word-Tabelle hinzu.
So formatieren Sie die Tabellenüberschriften
Erstellen Sie in der ActionsControl-Klasse eine Methode zum Formatieren der Tabellenüberschriften.
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; }
So erstellen Sie die Tabelle
Schreiben Sie in der ActionsControl-Klasse eine Methode, die ggf. eine Tabelle erstellt und der Tabelle dann Daten aus dem Aktionsbereich hinzufügt.
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); } }
So fügen Sie Text in eine Word-Tabelle ein
Fügen Sie folgenden Code zum Click-Ereignishandler der Schaltfläche Einfügen hinzu.
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); } }
In C# müssen Sie einen Ereignishandler für das Click-Ereignis der Schaltfläche erstellen. Sie können diesen Code in den Load-Ereignishandler der ActionsControl-Klasse einfügen.
this.Insert.Click += new EventHandler(Insert_Click);
Anzeigen des Aktionsbereichs
Der Aktionsbereich wird sichtbar, wenn Steuerelemente hinzugefügt werden.
So zeigen Sie den Aktionsbereich an
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf ThisDocument.vb oder ThisDocument.cs, und klicken Sie dann im Kontextmenü auf Code anzeigen.
Erstellen Sie wie im folgenden Beispiel eine neue Instanz des Steuerelements im oberen Teil der ThisDocument-Klasse.
Dim actions As New ActionsControl
private ActionsControl actions = new ActionsControl();
Fügen Sie dem Startup-Ereignishandler von ThisDocument wie im folgenden Beispiel gezeigt Code hinzu.
Me.ActionsPane.Controls.Add(actions)
this.ActionsPane.Controls.Add(actions);
Testen der Anwendung
Nun können Sie Ihr Dokument testen, um zu überprüfen, ob der Aktionsbereich beim Öffnen des Dokuments angezeigt wird. Überprüfen Sie die Master/Detail-Beziehung der Steuerelemente im Aktionsbereich, und stellen Sie sicher, dass eine Word-Tabelle mit Daten gefüllt wird, wenn auf die Schaltfläche Einfügen geklickt wird.
So testen Sie das Dokument
Drücken Sie F5, um das Projekt auszuführen.
Überprüfen Sie, ob der Aktionsbereich angezeigt wird.
Wählen Sie eine Firma im Kombinationsfeld, und stellen Sie sicher, das sich die Elemente des Listenfelds Products ändern.
Wählen Sie ein Produkt, klicken Sie im Aktionsbereich auf Einfügen, und überprüfen Sie, ob die Produktdetails der Word-Tabelle hinzugefügt werden.
Fügen Sie zusätzliche Produkte von verschiedenen Firmen ein.
Nächste Schritte
Diese exemplarische Vorgehensweise erklärt die Grundlagen der Bindung von Daten an Steuerelemente in einem Aktionsbereich in Word. Die folgenden Aufgaben könnten sich daran anschließen:
Binden von Daten an Steuerelemente in Excel. Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Bindung von Daten an Steuerelemente in einem Excel-Aktionsbereich.
Anzeigen und Ausblenden von Steuerelementen im Aktionsbereich. Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Ändern des Aktionsbereichs gemäß dem Benutzerkontext.
Bereitstellen des Projekts. Weitere Informationen finden Sie unter Übersicht über die Bereitstellung (Office-Entwicklung in Visual Studio).
Siehe auch
Aufgaben
Gewusst wie: Hinzufügen eines Aktionsbereichs zu Word-Dokumenten