共用方式為


BindingSource 元件架構

BindingSource透過元件,您可以將所有 Windows Forms 控制項通用系結至資料來源。

元件 BindingSource 可簡化將控制項系結至資料來源的程式,並提供下列優於傳統資料系結的優點:

  • 啟用對商務物件的設計階段系結。

  • 封裝 CurrencyManager 功能,並在設計階段公開 CurrencyManager 事件。

  • 為原本不支援清單變更通知的 IBindingList 資料來源提供清單變更通知,以簡化建立支援介面的清單。

  • 提供 方法的 IBindingList.AddNew 擴充點。

  • 提供資料來源與 控制項之間的間接存取層級。 當資料來源在執行時間可能變更時,此間接取值很重要。

  • 與其他資料相關的 Windows Forms 控制項交互操作,特別是 BindingNavigatorDataGridView 控制項。

基於這些原因, BindingSource 元件是將 Windows Forms 控制項系結至資料來源的慣用方式。

BindingSource 功能

元件 BindingSource 提供數個功能來將資料系結控制項。 透過這些功能,您可以實作大部分的資料系結案例,幾乎不需要撰寫程式碼。

元件 BindingSource 會藉由提供一致的介面來存取許多不同類型的資料來源來完成這項作業。 這表示您使用相同的程式系結至任何類型。 例如,您可以將 屬性附加 DataSourceDataSet 或 商務物件,而且在這兩種情況下,您會使用相同的屬性、方法和事件集來運算元據源。

元件所提供的 BindingSource 一致介面可大幅簡化將資料系結至控制項的程式。 對於提供變更通知的資料來源類型, BindingSource 元件會自動在控制項與資料來源之間傳達變更。 對於未提供變更通知的資料來源類型,會提供可讓您引發變更通知的事件。 下列清單顯示元件支援 BindingSource 的功能:

間接

元件 BindingSource 提供控制項與資料來源之間的間接存取層級。 您不必將控制項直接系結至資料來源,而是將控制項系結至 BindingSource ,並將資料來源附加至 BindingSource 元件的 DataSource 屬性。

透過此間接取值層級,您可以變更資料來源,而不需要重設控制項系結。 這可提供下列功能:

貨幣管理

元件 BindingSource 會實作 ICurrencyManagerProvider 介面,為您處理貨幣管理。 ICurrencyManagerProvider使用 介面,除了另一 BindingSourceBindingSource 系結至相同 DataMember 的貨幣管理員之外,您也可以存取 的貨幣管理員。

元件 BindingSourceCurrencyManager 封裝功能,並公開最常見的 CurrencyManager 屬性和事件。 下表描述與貨幣管理相關的一些成員。

CurrencyManager 屬性
取得與 BindingSource 相關聯的貨幣管理員。

GetRelatedCurrencyManager 方法
如果有另一個 BindingSource 系結至指定的資料成員,請取得其貨幣管理員。

Current 屬性
取得資料來源的目前項目。

Position 屬性
取得或設定基礎清單中的目前位置。

EndEdit 方法
將暫止的變更套用至基礎資料來源。

CancelEdit 方法
取消目前的編輯作業。

資料來源做為清單

元件 BindingSource 會實作 IBindingListViewITypedList 介面。 透過此實作,您可以使用 BindingSource 元件本身做為資料來源,而不需要任何外部儲存體。

BindingSource當元件附加至資料來源時,它會將資料來源公開為清單。

屬性 DataSource 可以設定為數個數據源。 這些包括類型、物件和型別清單。 產生的資料來源將會公開為清單。 下表顯示一些常見的資料來源和結果清單評估。

DataSource 屬性 列出結果
null 參考 (在 Visual Basic 中為 Nothing) 物件的空白 IBindingList 。 新增專案會將清單設定為已新增專案的類型。
Null 參考 ( Nothing 在 Visual Basic 中為 set) DataMember 不支援; ArgumentException會引發 。
類型為 「T」 的非清單類型或物件 類型為 「T」 的空白 IBindingList
陣列實例 IBindingList,包含陣列專案。
IEnumerable 實例 IBindingList,包含 IEnumerable 專案
包含類型 「T」 的清單實例 IBindingList包含類型 「T」 的實例。

此外, DataSource 也可以設定為其他清單類型,例如 IListSourceITypedList ,而且 BindingSource 會適當地處理它們。 在此情況下,清單中所包含的類型應該具有無參數建構函式。

BindingSource 做為 IBindingList

元件 BindingSource 提供成員來存取和操作基礎資料做為 IBindingList 。 下表說明其中一些成員。

member 描述
List 屬性 取得從 或 DataMember 屬性評估 DataSource 結果的清單。
AddNew 方法 將新的項目加入基礎清單中。 適用于實 IBindingList 作 介面並允許新增專案的資料來源(也就是 AllowNew 屬性設定為 true )。

自訂專案建立

您可以處理 AddingNew 事件,以提供您自己的專案建立邏輯。 在將新的 物件加入至 BindingSource 之前,就會 AddingNew 發生此事件。 呼叫 方法之後 AddNew ,就會引發這個事件,但在將新專案加入基礎清單之前。 藉由處理此事件,您可以提供自訂專案建立行為,而不衍生自 BindingSource 類別。 如需詳細資訊,請參閱 如何:使用 Windows Forms BindingSource 自訂專案新增。

交易式專案建立

元件 BindingSource 會實作 ICancelAddNew 介面,以啟用交易專案建立。 使用 呼叫 AddNew 暫時建立新專案之後,可能會以下列方式認可或回復新增專案:

  • 方法 EndNew 會明確認可擱置的新增。

  • 執行另一個收集作業,例如插入、移除或移動,將會隱含地認可擱置的新增作業。

  • 如果方法尚未認可,此方法 CancelNew 將會回復暫止的新增。

IEnumerable 支援

元件 BindingSource 可讓控制項系結至 IEnumerable 資料來源。 透過此元件,您可以系結至資料來源,例如 System.Data.SqlClient.SqlDataReader

IEnumerable將資料來源指派給 BindingSource 元件時,會 BindingSource 建立 IBindingList 並將資料來源的內容 IEnumerable 新增至清單。

設計階段支援

某些物件類型無法在設計階段建立,例如從處理站類別建立的物件,或 Web 服務傳回的物件。 您有時可能需要在設計階段將控制項系結至這些類型,即使記憶體中沒有控制項可以系結的物件也一樣。 例如,您可能需要將控制項的資料 DataGridView 行標頭加上自訂類型公用屬性的名稱標籤。

為了支援此案例, BindingSource 元件支援系結至 Type 。 當您將 指派 Type 給 屬性時 DataSourceBindingSource 元件會建立空白 BindingList<T>Type 的專案。 您後續系結至 BindingSource 元件的任何控制項,都會在設計階段或執行時間收到類型屬性或架構的警示。 如需詳細資訊,請參閱 如何:將 Windows Forms 控制項系結至類型

Static ListBindingHelper 方法

、 和 類型全都會共用通用邏輯,以從配對 /DataSourceDataMember 產生清單。 BindingSourceSystem.Windows.Forms.CurrencyManagerSystem.Windows.Forms.BindingContext 此外,此常見邏輯會公開供控制項作者和其他協力廠商在下列 static 方法中使用:

使用 IBindingListView 介面排序和篩選

元件 BindingSource 會實作 IBindingListView 介面,以擴充 IBindingList 介面。 提供 IBindingList 單一資料行排序,以及 IBindingListView 提供進階排序和篩選。 使用 IBindingListView 時,如果資料來源也實作其中一個介面,您可以在資料來源中排序和篩選項目。 元件 BindingSource 不提供這些成員的參考實作。 相反地,呼叫會轉送至基礎清單。

下表描述用於排序和篩選的屬性。

member 描述
Filter 屬性 如果資料來源是 IBindingListView,可取得或設定用來篩選所檢視之資料列的運算式。
Sort 屬性 如果資料來源是 IBindingList,可取得或設定用來排序的資料行名稱,以及排序次序資訊。

-或-

如果資料來源是 IBindingListView 且支援進階排序,取得用於排序和排序次序的多個資料行名稱

與 BindingNavigator 整合

您可以使用 BindingSource 元件將任何 Windows Forms 控制項系結至資料來源,但 BindingNavigator 控制項是專為使用 BindingSource 元件所設計。 控制項 BindingNavigator 提供使用者介面來控制 BindingSource 元件的目前專案。 根據預設, BindingNavigator 控制項會提供對應至元件上導覽方法的 BindingSource 按鈕。 如需詳細資訊,請參閱 如何:使用 Windows Forms BindingNavigator 控制項 巡覽資料。

另請參閱