Binden von Daten an Steuerelemente in Office-Lösungen

Sie können Windows Forms-Steuerelemente und Hoststeuerelemente auf einem Microsoft Office Word-Dokument oder einem Microsoft Office Excel-Arbeitsblatt an eine Datenquelle binden, sodass die Steuerelemente die Daten automatisch anzeigen. Sie können Daten sowohl in Projekten auf Anwendungsebene als auch in Projekten auf Dokumentebene an Steuerelemente binden.

Gilt für: Die Informationen in diesem Thema gelten für Projekte auf Dokumentebene und VSTO-Add-In-Projekte. Siehe features available by Office-App lication and project type.

Hoststeuerelemente erweitern Objekte in den Word- und Excel-Objektmodellen, beispielsweise Inhaltssteuerelemente in Word und benannte Bereiche in Excel. Weitere Informationen finden Sie unter Übersicht über Hostelemente und Hoststeuerelemente.

Sowohl in Windows Forms- als auch in Hoststeuerelementen wird das Windows Forms-Datenbindungsmodell verwendet, das sowohl einfache Datenbindung als auch komplexe Datenbindung an Datenquellen wie Datasets und Datentabellen unterstützt. Vollständige Informationen zum Datenbindungsmodell in Windows Forms finden Sie unter "Datenbindung" und "Windows Forms".

Einfache Datenbindung

Eine einfache Datenbindung besteht dann, wenn eine Steuerelementeigenschaft an ein einzelnes Datenelement (z. B. einen Wert in einer Datentabelle) gebunden ist. Zum Beispiel hat das NamedRange -Steuerelement die Value2 -Eigenschaft, die an ein Feld in einem Dataset gebunden werden kann. Wenn sich das Feld im Dataset ändert, ändert sich auch der Wert im benannten Bereich. Alle Hoststeuerelemente, mit Ausnahme des XMLNodes -Steuerelements, unterstützen einfache Datenbindung. Das XMLNodes -Steuerelement ist eine Auflistung und unterstützt daher keine Datenbindung.

Um eine einfache Datenbindung an ein Hoststeuerelement auszuführen, fügen Sie der DataBindings-Eigenschaft des Steuerelements ein Binding-Objekt hinzu. Ein Binding -Objekt stellt die einfache Bindung zwischen einem Eigenschaftswert des Steuerelements und dem Wert eines Datenelements dar.

Im folgenden Beispiel wird veranschaulicht, wie die Value2 -Eigenschaft in einem Projekt auf Dokumentebene an ein Datenelement gebunden wird.

Binding binding1 = new Binding("Value2", ds, "Customers.Names", true);
namedRange1.DataBindings.Add(binding1);

Walkthroughs that demonstrates simple data binding, see Walkthrough: Simple data binding in a document-level project for a document-level project and Walkthrough: Simple data binding in VSTO Add-in project for a VSTO Add-in project.

Komplexe Datenbindung

Eine komplexe Datenbindung besteht dann, wenn eine Steuerelementeigenschaft an mindestens zwei Datenelemente (z. B. mehrere Spalten einer Datentabelle) gebunden ist. Das ListObject -Steuerelement für Excel ist das einzige Hoststeuerelement, das komplexe Datenbindung unterstützt. Zudem unterstützen viele Windows Forms-Steuerelemente komplexe Datenbindung, etwa das DataGridView -Steuerelement.

Um eine komplexe Datenbindung auszuführen, legen Sie die DataSource-Eigenschaft des Steuerelements auf ein Datenquellenobjekt fest, das von komplexer Datenbindung unterstützt wird. Beispielsweise kann die DataSource -Eigenschaft des ListObject -Steuerelements an mehrere Spalten einer Datentabelle gebunden werden. Alle Daten in der Datentabelle werden im ListObject -Steuerelement angezeigt, und wenn sich die Daten in der Datentabelle ändern, ändert sich auch aus ListObject -Steuerelement. Eine Liste der Datenquellen, die Sie für die komplexe Datenbindung verwenden können, finden Sie unter Datenquellen, die von Windows Forms unterstützt werden.

Im folgenden Codebeispiel wird ein DataSet mit zwei DataTable -Objekten erstellt, und eine der Tabellen wird mit Daten aufgefüllt. Im Code wird dann das ListObject -Steuerelement an die Tabelle gebunden, die Daten enthält. Dieses Beispiel gilt für ein Excel-Projekt auf Dokumentebene.

private void ListObject_DataSourceAndMember()
{
    // Create a DataSet and two DataTables.
    DataSet ordersDataSet = new DataSet("ordersDataSet");
    DataTable tableCustomers = new DataTable("Customers");
    DataTable tableProducts = new DataTable("Products");
    ordersDataSet.Tables.Add(tableCustomers);
    ordersDataSet.Tables.Add(tableProducts);

    // Add a data to the Customers DataTable.
    tableCustomers.Columns.Add(new DataColumn("LastName"));
    tableCustomers.Columns.Add(new DataColumn("FirstName"));
    DataRow dr = tableCustomers.NewRow();
    dr["LastName"] = "Chan";
    dr["FirstName"] = "Gareth";
    tableCustomers.Rows.Add(dr);

    // Create a list object.
    Microsoft.Office.Tools.Excel.ListObject list1 = 
        this.Controls.AddListObject(
        this.Range["A1"], "Customers");

    // Bind the list object to the Customers table.
    list1.AutoSetDataBoundColumnHeaders = true;
    list1.DataSource = ordersDataSet;
    list1.DataMember = "Customers";
}

Eine exemplarische Vorgehensweise, die komplexe Datenbindung veranschaulicht, finden Sie unter Walkthrough: Complex data binding in a document-level project for a document-level project.

Anzeigen von Daten in Dokumenten und Arbeitsmappen

In Projekten auf Dokumentebene können Sie mithilfe des Fensters Datenquellen Dokumenten oder Arbeitsmappen datengebundene Steuerelemente auf die gleiche einfache Weise wie für Windows Forms hinzufügen. Weitere Informationen zur Verwendung des Datenquellenfensters finden Sie unter Binden von Windows Forms-Steuerelementen an Daten in Visual Studio und Hinzufügen neuer Datenquellen.

Ziehen von Steuerelementen aus dem Fenster "Datenquellen"

Auf einem Dokument wird ein Steuerelement erstellt, wenn Sie aus dem Fenster Datenquellen ein Objekt auf das Dokument ziehen. Der Typ des erstellten Steuerelements ist davon abhängig, ob Sie an eine einzelne Datenspalte oder an mehrere Datenspalten binden.

In Excel werden auf dem Arbeitsblatt ein NamedRange -Steuerelement für jedes einzelne Feld und für jeden Datenbereich, der mehrere Zeilen und Spalten enthält, ein ListObject -Steuerelement erstellt. Sie können diese Standardeinstellung ändern, indem Sie im Fenster Datenquellen das Feld oder die Tabelle auswählen und dann in der Dropdownliste ein anderes Steuerelement auswählen.

Ein ContentControl -Steuerelement wird den Dokumenten hinzugefügt. Der Typ des Inhaltssteuerelements hängt vom Datentyp des von Ihnen ausgewählten Felds ab.

Binden von Daten in Projekten auf Dokumentebene zur Entwurfszeit

In den folgenden Themen werden Beispiele für das Binden von Daten zur Entwurfszeit erläutert:

Binden von Daten in VSTO-Add-In-Projekten

In VSTO-Add-in-Projekten können Sie Steuerelemente nur zur Laufzeit hinzufügen. In den folgenden Themen werden Beispiele für das Binden von Daten zur Laufzeit erläutert:

Aktualisieren von Daten, die an Hoststeuerelemente gebunden sind

Eine Datenbindung zwischen einer Datenquelle und einem Hoststeuerelement bedingt eine bidirektionale Datenaktualisierung. Bei einer einfachen Datenbindung werden Änderungen in der Datenquelle automatisch für das Hoststeuerelement übernommen, aber Änderungen im Hoststeuerelement erfordern einen expliziten Aufruf, damit die Datenquelle aktualisiert wird. Dies ist darauf zurückzuführen, dass in einigen Fällen Änderungen in einem datengebundenen Feld nur dann akzeptiert werden, wenn gleichzeitig auch Änderungen in einem anderen datengebundenen Feld vorgenommen werden. Es könnten z. B. zwei Felder vorhanden sein: eines für das Alter und eines für die Jahre an Berufserfahrung. Die Berufserfahrung kann das Alter nicht übersteigen Ein Benutzer kann nur dann das Alter von 50 in 25 und die Berufserfahrung von 30 in 10 ändern, wenn er die Änderungen gleichzeitig vornimmt. Um dieses Problem zu beheben, werden Felder mit einfacher Datenbindung erst aktualisiert, wenn die Aktualisierungen explizit durch Code gesendet wurden.

Um eine Datenquelle aus Hoststeuerelementen zu aktualisieren, die einfache Datenbindung ermöglichen, müssen Sie Aktualisierungen an die In-Memory-Datenquelle (etwa ein DataSet oder eine DataTable) und an die Back-End-Datenbank senden, wenn in Ihrer Projektmappe eine solche verwendet wird.

Sie müssen die In-Memory-Datenquelle nicht explizit aktualisieren, wenn Sie eine komplexe Datenbindung mit dem ListObject -Steuerelement ausführen. In diesem Fall werden Änderungen automatisch ohne zusätzlichen Code an die In-Memory-Datenquelle gesendet.

Weitere Informationen finden Sie unter How to: Update a data source with data from a host control.