Sdílet prostřednictvím


Exemplarische Vorgehensweise: Binden von Daten an Steuerelemente in einem Word-Aktionsbereich

Aktualisiert: November 2007

Betrifft

Die Informationen in diesem Thema gelten nur für die angegebenen Projekte und Versionen von Visual Studio Tools for Office von Microsoft Office.

Projekttyp

  • Projekte auf Dokumentebene

Microsoft Office-Version

  • Word 2007

  • Word 2003

Weitere Informationen hierzu finden Sie unter Verfügbare Features nach Anwendung und Projekttyp.

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.

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.

ms178783.alert_note(de-de,VS.90).gifHinweis:

Auf Ihrem Computer werden möglicherweise andere Namen oder Speicherorte für die Benutzeroberflächenelemente von Visual Studio, die in den folgenden Anweisungen aufgeführt sind, angezeigt. Die von Ihnen verwendete Visual Studio-Edition und die Einstellungen legen diese Elemente fest. Weitere Informationen finden Sie unter Visual Studio-Einstellungen.

Vorbereitungsmaßnahmen

Zum Durchführen dieser exemplarischen Vorgehensweise benötigen Sie die folgenden Komponenten:

  • Visual Studio Tools for Office (eine optionale Komponente von Visual Studio 2008 Professional und Visual Studio Team System).

  • Microsoft Office Word 2003 oder Microsoft Office Word 2007.

  • Zugriff auf einen Server mit der SQL Server-Beispieldatenbank Northwind.

  • Lese- und Schreibberechtigungen für die SQL Server-Datenbank.

Visual Studio Tools for Office wird standardmäßig mit den aufgeführten Versionen von Visual Studio installiert. Wie Sie überprüfen können, ob die Software installiert ist, erfahren Sie in Installieren von Visual Studio Tools for Office.

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 hierzu finden Sie unter Gewusst wie: Erstellen von Visual Studio Tools for Office-Projekte.

    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

  1. Wählen Sie im Projektmappen-Explorer das Projekt My Word Actions Pane aus.

  2. Klicken Sie im Menü Projekt auf Neues Element hinzufügen.

  3. 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

  1. Wenn das Datenquellenfenster nicht sichtbar ist, klicken Sie im Menü Daten auf Datenquellen anzeigen.

    ms178783.alert_note(de-de,VS.90).gifHinweis:

    Wenn Datenquellen anzeigen nicht verfügbar ist, klicken Sie auf das Word-Dokument, und versuchen Sie es dann erneut.

  2. Klicken Sie auf Neue Datenquelle hinzufügen, um den Assistent zum Konfigurieren von Datenquellen zu starten.

  3. Wählen Sie Datenbank aus, und klicken Sie auf Weiter.

  4. 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.

  5. Klicken Sie auf Weiter.

  6. Deaktivieren Sie ggf. die Option zum Speichern der Verbindung, und klicken Sie dann auf Weiter.

  7. Erweitern Sie im Fenster Datenbankobjekte den Knoten Tabellen.

  8. Aktivieren Sie die Kontrollkästchen neben der Tabelle Suppliers und der Tabelle Products.

  9. 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

  1. Erweitern Sie im Datenquellenfenster die Tabelle Suppliers.

  2. Klicken Sie im Knoten Company Name auf den Dropdownpfeil, und wählen Sie ComboBox.

  3. Ziehen Sie CompanyName aus dem Datenquellenfenster zum Aktionsbereich-Steuerelement.

    Im Aktionsbereich-Steuerelement wird ein ComboBox-Steuerelement erstellt. Gleichzeitig werden dem Projekt im Komponentenfach eine BindingSource mit dem Namen SuppliersBindingSource, ein Tabellenadapter und ein DataSet hinzugefügt.

  4. Wählen Sie im Komponentenfach den Eintrag SuppliersBindingNavigator aus, und drücken Sie ENTF. In dieser exemplarischen Vorgehensweise verwenden Sie SuppliersBindingNavigator nicht.

    ms178783.alert_note(de-de,VS.90).gifHinweis:

    Beim Löschen des SuppliersBindingNavigator wird nicht der gesamte dafür generierte Code gelöscht. Sie können diesen Code entfernen.

  5. Verschieben Sie das Kombinationsfeld unter die Beschriftung, und ändern Sie die Size-Eigenschaft auf 171, 21.

  6. Erweitern Sie im Fenster Datenquellen die Tabelle Products, die ein untergeordnetes Element der Tabelle Suppliers darstellt.

  7. Klicken Sie im Knoten ProductName auf den Dropdownpfeil, und wählen Sie ListBoxaus.

  8. Ziehen Sie ProductName in das Aktionsbereich-Steuerelement.

    Im Aktionsbereich-Steuerelement wird ein ListBox-Steuerelement erstellt. Gleichzeitig werden dem Projekt im Komponentenfach eine BindingSource mit dem Namen ProductBindingSource und ein Tabellenadapter hinzugefügt.

  9. Verschieben Sie das Listenfeld unter die Beschriftung und ändern Sie die Size-Eigenschaft auf 171,95.

  10. Ziehen Sie aus der Toolbox eine Button in das Aktionsbereich-Steuerelement, und platzieren Sie diese unter dem Listenfeld.

  11. 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

    Einfügen

  12. 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

  1. 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);
    }
    
  2. 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 Visual Studio Tools for Office.

    this.Load += new EventHandler(ActionsControl_Load);
    

So legen Sie die Datenbindungseigenschaften der Steuerelemente fest

  1. Wählen Sie das CompanyNameComboBox-Steuerelement aus.

  2. Klicken Sie im Eigenschaftenfenster auf die Schaltfläche rechts von der DataSource-Eigenschaft, und wählen Sie SuppliersBindingSource aus.

  3. Klicken Sie auf die Schaltfläche rechts von der DisplayMember-Eigenschaft, und wählen Sie CompanyName aus.

  4. Erweitern Sie die DataBindings-Eigenschaft, klicken Sie auf die Schaltfläche rechts von der Text-Eigenschaft, und wählen Sie Keine aus.

  5. Wählen Sie das ProductNameListBox-Steuerelement aus.

  6. Klicken Sie im Eigenschaftenfenster auf die Schaltfläche rechts von der DataSource-Eigenschaft, und wählen Sie productsBindingSource aus.

  7. Klicken Sie auf die Schaltfläche rechts von der DisplayMember-Eigenschaft, und wählen Sie ProductName aus.

  8. 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

  1. 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);
        }
    }
    
  2. 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

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf ThisDocument.vb oder ThisDocument.cs, und klicken Sie dann im Kontextmenü auf Code anzeigen.

  2. 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();
    
  3. 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

  1. Drücken Sie F5, um das Projekt auszuführen.

  2. Überprüfen Sie, ob der Aktionsbereich angezeigt wird.

  3. Wählen Sie eine Firma im Kombinationsfeld, und stellen Sie sicher, das sich die Elemente des Listenfelds Products ändern.

  4. 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.

  5. 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:

Siehe auch

Aufgaben

Gewusst wie: Hinzufügen eines Aktionsbereichs zu Word-Dokumenten

Konzepte

Aktionsbereichsübersicht

Binden von Daten an Steuerelemente