Wiązanie danych z kontrolkami w rozwiązaniach pakietu Office

Kontrolki formularzy systemu Windows i kontrolki hosta można powiązać z dokumentem programu Microsoft Office Word lub arkuszem programu Microsoft Office Excel ze źródłem danych, aby kontrolki automatycznie wyświetlały dane. Dane można powiązać z kontrolkami zarówno w projektach na poziomie aplikacji, jak i na poziomie dokumentu.

Dotyczy: informacje w tym temacie dotyczą projektów na poziomie dokumentu i projektów dodatków VSTO. Zobacz Funkcje dostępne według aplikacja pakietu Office lication i typu projektu.

Kontrolki hosta rozszerzają obiekty znajdujące się w modelach obiektów programów Word i Excel, takich jak kontrolki zawartości w programie Word i nazwane zakresy w programie Excel. Aby uzyskać więcej informacji, zobacz Omówienie elementów hosta i kontrolek hosta.

Zarówno formularze systemu Windows, jak i kontrolki hosta używają modelu powiązania danych windows Forms, który obsługuje zarówno proste powiązanie danych, jak i złożone powiązanie danych ze źródłami danych, takimi jak zestawy danych i tabele danych. Aby uzyskać pełne informacje na temat modelu powiązania danych w formularzach Windows Forms, zobacz Powiązania danych i Formularze systemu Windows.

Proste powiązanie danych

Proste powiązanie danych istnieje, gdy właściwość kontrolki jest powiązana z pojedynczym elementem danych, takim jak wartość w tabeli danych. Na przykład kontrolka NamedRange ma Value2 właściwość, którą można powiązać z polem w zestawie danych. Gdy pole w zestawie danych zmieni się, wartość w nazwanym zakresie również się zmienia. Wszystkie kontrolki hosta, z wyjątkiem kontrolki XMLNodes , obsługują proste powiązanie danych. Kontrolka XMLNodes jest kolekcją i dlatego nie obsługuje powiązania danych.

Aby wykonać proste powiązanie danych z kontrolką hosta, dodaj element Binding do DataBindings właściwości kontrolki. Binding Obiekt reprezentuje proste powiązanie między wartością właściwości kontrolki a wartością elementu danych.

W poniższym przykładzie pokazano, jak powiązać Value2 właściwość z elementem danych w projekcie na poziomie dokumentu.

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

Aby zapoznać się z przewodnikami, które pokazują proste powiązanie danych, zobacz Przewodnik: proste powiązanie danych w projekcie na poziomie dokumentu dla projektu na poziomie dokumentu i Przewodnik: proste powiązanie danych w projekcie dodatku VSTO dla projektu dodatku VSTO.

Złożone powiązanie danych

Złożone powiązanie danych istnieje, gdy właściwość kontrolki jest powiązana z więcej niż jednym elementem danych, takim jak wiele kolumn w tabeli danych. Kontrolka ListObject programu Excel jest jedyną kontrolką hosta, która obsługuje złożone powiązanie danych. Istnieje również wiele kontrolek formularzy systemu Windows, które obsługują złożone powiązanie danych, takie jak kontrolka DataGridView .

Aby wykonać złożone powiązanie danych, ustaw DataSource właściwość kontrolki na obiekt źródła danych obsługiwany przez złożone powiązanie danych. Na przykład DataSource właściwość kontrolki ListObject może być powiązana z wieloma kolumnami w tabeli danych. Wszystkie dane w tabeli danych są wyświetlane w kontrolce ListObject , a wraz ze zmianami ListObject danych w tabeli danych również zmieniają się. Aby uzyskać listę źródeł danych, których można użyć do tworzenia złożonych powiązań danych, zobacz Źródła danych obsługiwane przez formularze systemu Windows.

Poniższy przykład kodu tworzy obiekt DataSet z dwoma DataTable obiektami i wypełnia jedną z tabel danymi. Następnie kod wiąże element z ListObject tabelą zawierającą dane. Ten przykład dotyczy projektu na poziomie dokumentu programu Excel.

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";
}

Aby zapoznać się z przewodnikiem przedstawiającym złożone powiązanie danych, zobacz Przewodnik: złożone powiązanie danych w projekcie na poziomie dokumentu dla projektu na poziomie dokumentu.

Wyświetlanie danych w dokumentach i skoroszytach

W projektach na poziomie dokumentu możesz użyć okna Źródła danych, aby łatwo dodać kontrolki powiązane z danymi do dokumentów lub skoroszytów, tak samo jak w przypadku formularzy systemu Windows. Aby uzyskać więcej informacji na temat korzystania z okna Źródła danych, zobacz Wiązanie kontrolek formularzy systemu Windows z danymi w programie Visual Studio i Dodawanie nowych źródeł danych.

Przeciągnij kontrolki z okna Źródła danych

Kontrolka jest tworzona w dokumencie podczas przeciągania obiektu do niego z okna Źródła danych. Typ tworzonej kontrolki zależy od tego, czy wiążesz jedną kolumnę danych, czy wiele kolumn danych.

W przypadku programu Excel kontrolka NamedRange jest tworzona w arkuszu dla każdego pola, a kontrolka ListObject jest tworzona dla każdego zakresu danych zawierającego wiele wierszy i kolumn. Tę wartość domyślną można zmienić, wybierając tabelę lub pole w oknie Źródła danych, a następnie wybierając inną kontrolkę z listy rozwijanej.

Kontrolka ContentControl jest dodawana do dokumentów. Typ kontrolki zawartości zależy od typu danych wybranego pola.

Wiązanie danych w projektach na poziomie dokumentu w czasie projektowania

W poniższych tematach przedstawiono przykłady danych powiązania w czasie projektowania:

Wiązanie danych w projektach dodatków VSTO

W projektach dodatków VSTO można dodawać kontrolki tylko w czasie wykonywania. W poniższych tematach przedstawiono przykłady danych powiązania w czasie wykonywania:

Aktualizowanie danych powiązanych z kontrolkami hosta

Powiązanie danych między źródłem danych a kontrolką hosta obejmuje dwukierunkową aktualizację danych. W prostym powiązaniu danych zmiany w źródle danych są odzwierciedlane automatycznie w kontrolce hosta, ale zmiany w kontrolce hosta wymagają jawnego wywołania w celu zaktualizowania źródła danych. Przyczyną jest to, że w niektórych przypadkach zmiany w jednym polu powiązanym z danymi nie są akceptowane, chyba że towarzyszą one zmianom w innym polu powiązanym z danymi. Na przykład możesz mieć dwa pola, jedną dla wieku i jedną na lata doświadczenia. Doświadczenie nie może przekraczać wieku. Użytkownik nie może zaktualizować wieku od 50 do 25, a następnie środowiska z 30 do 10, chyba że wprowadza zmiany w tym samym czasie. Aby rozwiązać ten problem, pola z prostym powiązaniem danych nie są aktualizowane, dopóki aktualizacje nie zostaną jawnie wysłane za pomocą kodu.

Aby zaktualizować źródło danych z kontrolek hosta, które umożliwiają proste powiązanie danych, należy wysłać aktualizacje do źródła danych w pamięci (takiego jak DataSet lub DataTable) i do bazy danych zaplecza, jeśli używane jest to rozwiązanie.

Nie trzeba jawnie aktualizować źródła danych w pamięci podczas wykonywania złożonego powiązania danych przy użyciu kontrolki ListObject . W takim przypadku zmiany są automatycznie wysyłane do źródła danych w pamięci bez dodatkowego kodu.

Aby uzyskać więcej informacji, zobacz How to: Update a data source with data from a host control (Instrukcje: aktualizowanie źródła danych przy użyciu danych z kontrolki hosta).