將資料繫結至 Office 方案中的控制項

您可以將 Microsoft Office Word 文件或 Microsoft Office Excel 工作表中的 Windows Form 控制項和「主控制項」 (host control) 繫結至資料來源,讓控制項自動顯示資料。 您可以將資料繫結至應用程式層級和文件層級專案中的控制項。

適用對象:本主題資訊適用於文件層級的專案和 VSTO 增益集專案。 請參閱依 Office 應用程式和專案類型提供的功能

主控制項會擴充 Word 和 Excel 物件模型中的物件,例如 Word 中的內容控制項和 Excel 中的具名範圍。 如需詳細資訊,請參閱主項目和主控制項概觀

Windows Form 和主控制項都會使用 Windows Form 資料繫結模型,這個模型同時支援對資料集和資料表等資料來源執行「簡單資料繫結」 (simple data binding) 和「複雜資料繫結」 (complex data binding)。 如需 Windows Forms 中資料繫結模型的完整資訊,請參閱資料繫結和 Windows Forms

簡單資料繫結

當控制項屬性繫結至單一資料項目時,例如資料表中的值,便存在簡單資料繫結。 例如, NamedRange 控制項具有 Value2 屬性,該屬性可繫結至資料集中的欄位。 當資料集中的欄位變更時,具名範圍中的值也會變更。 除了 XMLNodes 控制項以外,所有主控制項都支援簡單資料繫結。 XMLNodes 控制項是一個集合,因此不支援資料繫結。

若要對主控制項執行簡單資料繫結,請將 Binding 加入該控制項的 DataBindings 屬性。 Binding 物件代表控制項屬性值與資料項目值之間的簡單繫結。

下列範例示範如何在文件層級專案中,將 Value2 屬性繫結至資料項目。

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

如需示範簡單資料繫結的逐步解說,請參閱用於文件層級專案的逐步解說:文件層級專案中的簡單資料繫結和用於 VSTO 增益集專案的逐步解說:VSTO 增益集專案中的簡單資料繫結

複雜資料繫結

當控制項屬性繫結至多個資料項目時,例如資料表中的多個資料行,便存在複雜資料繫結。 Excel 的 ListObject 控制項是唯一支援複雜資料繫結的主控制項。 另外還有許多支援複雜資料繫結的 Windows Form 控制項,例如 DataGridView 控制項。

若要執行複雜資料繫結,請將控制項的 DataSource 屬性設定為複雜資料繫結所支援的資料來源物件。 例如, DataSource 控制項的 ListObject 屬性可以繫結至資料表中的多個資料行。 資料表中的所有資料會顯示在 ListObject 控制項中,而且當資料表中的資料變更時, ListObject 也會變更。 如需可用於複雜資料繫結的資料來源清單,請參閱 Windows Form 支援的資料來源

下列程式碼範例會建立具有兩個 DataSet 物件的 DataTable ,並將資料填入其中一個資料表。 然後程式碼會將 ListObject 繫結至含有資料的資料表。 這是示範 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";
}

如需示範複雜資料繫結的逐步解說,請參閱用於文件層級專案的逐步解說:文件層級專案中的複雜資料繫結

在文件和活頁簿中顯示資料

在文件層級專案中,您可以輕鬆地使用 [資料來源] 視窗將資料繫結控制項加入文件或活頁簿,與用於 Windows Form 的方法相同。 如需使用 [資料來源] 視窗的詳細資訊,請參閱將 Windows Forms 控制項繫結至 Visual Studio 中的資料新增新資料來源

從資料來源視窗拖曳控制項

當您從 [資料來源] 視窗將某個物件拖曳到文件時,文件上會建立控制項。 所建立的控制項類型取決於您繫結的是單一資料行,還是多個資料行。

就 Excel 而言,工作表上會針對每個欄位建立 NamedRange 控制項,並針對每個包含多個資料列和資料行的資料範圍建立 ListObject 控制項。 您可以在 [資料來源] 視窗中選取資料表或欄位,然後從下拉式清單中選擇不同的控制項,來變更這個預設值。

ContentControl 控制項已加入文件。 內容控制項的類型取決於您選取的欄位資料類型。

在文件層級專案的設計階段繫結資料

下列主題示範如何在設計階段繫結資料:

在 VSTO 增益集專案中繫結資料

在 VSTO 增益集專案中,您只能在執行階段加入控制項。 下列主題示範如何在執行階段繫結資料:

更新繫結至主控制項的資料

資料來源與主控制項之間的資料繫結涉及雙向資料更新。 在簡單資料繫結中,資料來源中的變更會自動反映在主控制項中,但主控制項中的變更需要明確的呼叫才能更新資料來源。 這是因為在某些情況下,一個資料繫結欄位中的變更,必須也發生在另一個資料繫結欄位中,才會予以接受。 例如,您可能有兩個欄位,一個用於年齡,另一個用於工作經驗。 工作經驗不可超過年齡。 使用者不可將年齡從 50 更新為 25,然後再將工作經驗從 30 更新為 10,除非該使用者同時進行變更。 為了解決這個問題,簡單資料繫結的欄位會在程式碼明確傳送更新之後才進行更新。

若要從啟用簡單資料繫結的主控制項更新資料來源,您必須將更新傳送至記憶體內部資料來源 (例如 DataSetDataTable),並傳送至後端資料庫 (如果方案有使用的話)。

使用 ListObject 控制項執行複雜資料繫結時,不需要明確更新記憶體內部資料來源。 在該情況下,變更會自動傳送至記憶體內部資料來源,而不需要其他程式碼。

如需詳細資訊,請參閱如何:使用主控制項中的資料更新資料來源