透過 BindingSource 元件,您可以將所有 Windows Forms 控制項普遍繫結至資料來源。
啟用對商業物件的設計時間繫結。
封裝CurrencyManager 功能,並在設計時間公開CurrencyManager 事件。
為本身不支援清單變更通知的資料來源提供清單變更通知,以簡化建立支援IBindingList介面的清單。
提供 IBindingList.AddNew 方法的擴充點。
提供資料來源與控制元件之間的間接層。 當資料來源在執行階段可能變更時,此間接取值很重要。
與其他資料相關的 Windows Forms 控制項互操作,特別是 BindingNavigator 和 DataGridView 控制項。
基於這些原因,BindingSource 元件是將 Windows Forms 控制項繫結至資料來源的慣用方式。
BindingSource 功能
BindingSource 元件提供多項功能來將控制項繫結到資料。 透過這些功能,您可以實作大部分的資料繫結案例,幾乎不需要撰寫程式碼。
BindingSource 元件藉由提供一致的介面來存取許多不同類型的資料來源來完成這項作業。 這表示您對任何一種類型使用相同的綁定流程。 例如,您可以將 DataSource 屬性附加到 DataSet 或商務物件上,而且無論是哪種情況,您都使用相同的屬性、方法和事件集來操作資料來源。
BindingSource 元件所提供的一致介面大幅簡化了將資料繫結至控制項的過程。 對於提供變更通知的資料來源類型,BindingSource 會自動在控制項與資料來源之間傳遞變更。 對於未提供變更通知的資料來源類型,會提供可讓您引發變更通知的事件。 下列清單顯示 BindingSource 元件支援的功能:
間接。
貨幣管理。
資料來源以清單呈現。
BindingSource 作為 IBindingList 使用。
自訂項目建立。
交易式項目建立。
IEnumerable 支援。
設計階段支援。
靜態 ListBindingHelper 方法。
使用 IBindingListView 介面進行排序和篩選。
與 BindingNavigator 整合。
間接
BindingSource 元件提供控制項與資料來源之間的間接存取層級。 您不會將控制項直接繫結至資料來源,而是將控制項繫結至 BindingSource,並將資料來源附加至 BindingSource 元件的 DataSource 屬性。
透過此間接取值層級,您可以變更資料來源,而不需要重設控制項繫結。 這可提供下列功能:
您可以將 BindingSource 附加至不同的資料來源,同時保留目前的控制項繫結。
您可以變更資料來源中的項目,並通知界限控制項。 如需詳細資訊,請參閱操作說明:使用 BindingSource 反映 Windows Forms 控制項中的資料來源更新。
您可以繫結至Type,而不是記憶體中的物件。 如需詳細資訊,請參閱操作說明:將 Windows Forms 控制項繫結至類型。 然後,您可以在執行階段繫結至物件。
貨幣管理
BindingSource 元件實作 ICurrencyManagerProvider 介面,以便為您處理貨幣管理。 使用ICurrencyManagerProvider介面,除了可以存取與相同DataMember繫結的另一個BindingSource的貨幣管理員之外,您也可以存取BindingSource的貨幣管理員。
CurrencyManager 屬性 取得與 BindingSource相關聯的貨幣管理員。
GetRelatedCurrencyManager 方法 如果有另一個 BindingSource 系結至指定的數據成員,請取得其貨幣管理員。
Current 屬性 取得資料來源的當前項目。
Position 屬性 取得或設定基礎清單中的目前位置。
EndEdit 方法將待處理的變更套用至基礎數據源。
CancelEdit 方法會取消目前的編輯作業。
資料來源為列表
BindingSource 元件實作 IBindingListView 和 ITypedList 介面。 透過此實作,您可以使用 BindingSource 元件本身作為資料來源,而不需要任何外部儲存。
當 BindingSource 元件附加至資料來源時,它會將資料來源呈現為清單。
DataSource 屬性可以設定為多個資料來源。 這些包括類型、物件和型別清單。 產生的資料來源將會公開為清單。 下表顯示一些常見的資料來源和結果清單評估。
| DataSource 屬性 | 清單結果 |
|---|---|
null 參考 (在 Visual Basic 中為 Nothing) |
物件的空 IBindingList。 新增項目會將清單設定為已新增項目的類型。 |
一個 null 參考 (Nothing) 在 Visual Basic 中為 Nothing 且 DataMember 已設定 |
不支援;引發 ArgumentException。 |
| 類型為「T」的非清單類型或物件 | 類型「T」的空白IBindingList。 |
| 陣列執行個體 | 包含陣列元素的 IBindingList。 |
| IEnumerable IEnumerable 執行個體 | 包含 IBindingList 的 IEnumerable 項目 |
| 包含類型參數「T」的清單執行個體 | 包含類型「T」的 IBindingList 執行個體。 |
此外,DataSource 可以設定為其他清單類型,例如 IListSource 和 ITypedList,而 BindingSource 會妥善處理它們。 在此情況下,清單中所包含的類型應該具有無參數建構函式。
BindingSource 作為 IBindingList
BindingSource 元件提供成員以便作為 IBindingList 來存取和操作基礎資料。 下表會介紹其中一些成員。
| 會員 | 說明 |
|---|---|
| List 屬性 | 取得由評估 DataSource 或 DataMember 屬性所產生的清單。 |
| AddNew 方法 | 將新的項目加入基礎清單中。 適用於實作IBindingList介面並允許新增項目的資料來源(也就是,AllowNew屬性設定為true)。 |
自訂項目建立
您可以處理 AddingNew 事件,以提供您自己的項目建立邏輯。 AddingNew 事件會在新的物件加入至 BindingSource 之前發生。 在AddNew方法被呼叫之後,但在將新項目新增至基本清單之前,會引發此事件。 藉由處理此事件,您可以提供自訂項目建立行為,而不需要從特定類別衍生。 如需詳細資訊,請參閱「如何:使用 Windows Forms BindingSource 自訂項目加入」。
交易式項目建立
BindingSource 元件實作了 ICancelAddNew 介面,這能夠實現交易項目的建立。 使用呼叫 AddNew 暫時建立新項目之後,新增可能會以下列方式提交或還原:
IEnumerable 的支援
<a href="/dotnet/api/system.windows.forms.bindingsource" class="no-loc" data-linktype="absolute-path">BindingSource</a> 元件用來使控制項與 <a href="/dotnet/api/system.collections.ienumerable" class="no-loc" data-linktype="absolute-path">IEnumerable</a> 資料來源綁定。 透過此元件,您可以繫結至資料來源,例如 System.Data.SqlClient.SqlDataReader。
將
設計時期支援
某些物件類型無法在設計時間建立,例如從處理站類別建立的物件,或 Web 服務傳回的物件。 有時您可能需要在設計時將控制項繫結至這些類型,即使記憶體中沒有可供控制項繫結的物件。 例如,您可能需要使用自訂類型公用屬性的名稱,標示 DataGridView 控制項的資料行標頭。
為了支援此案例,BindingSource 元件支援繫結至 Type。 當您將 Type 指派給 DataSource 屬性時,BindingSource 元件會建立空的 BindingList<T>,這包含Type項目。 您後續繫結至 BindingSource 元件的任何控制項,都會在設計時間或執行階段獲得有關您的類型屬性或架構存在的通知。 如需詳細資訊,請參閱〈操作說明:將 Windows Forms 控制項繫結至類型〉。
Static ListBindingHelper 方法
static 方法中公開,以供控制項作者與其他第三方使用:
使用 IBindingListView 介面排序和篩選
BindingSource 元件實作了延伸自 IBindingList 介面的 IBindingListView 介面。 IBindingList 支援單一資料行排序,而 IBindingListView 則提供進階的排序和篩選。 使用 IBindingListView,如果資料來源也實作了其中一個介面,您可以對資料來源中的項目進行排序和篩選。 BindingSource 元件不提供這些成員的參考實作。 相反地,呼叫會轉送至底層清單。
下表描述用於排序和篩選的屬性。
| 會員 | 說明 |
|---|---|
| Filter 屬性 | 如果資料來源是 IBindingListView,可以取得或設定用於篩選哪些資料列被檢視的運算式。 |
| Sort 屬性 | 如果資料來源是 IBindingList,可取得或設定用於排序的欄位名稱以及排序順序資訊。 -或- 如果資料來源是 IBindingListView 並支援進階排序,可取得用來排序的多個資料行名稱,以及排序次序 |
與 BindingNavigator 整合
您可以使用BindingSource元件將任何 Windows Forms 控制項繫結至資料來源,但BindingNavigator控制項是專為與BindingSource元件搭配使用而設計。 BindingNavigator 控制項提供使用者介面來控制 BindingSource 元件的目前項目。 根據預設,BindingNavigator 控制項提供的按鈕會對應至 BindingSource 元件上的導覽方法。 如需詳細資訊,請參閱 使用 Windows Forms BindingNavigator 控制項瀏覽資料的方法。
另請參閱
- BindingSource
- BindingNavigator
- BindingSource 元件概觀
- BindingNavigator 控制項
- Windows Forms 資料繫結
- 在 Windows Forms 上使用的控制項
- 如何將 Windows Forms 控制項繫結至類型
- 如何:使用 BindingSource 反映 Windows Forms 控制項中資料來源的更新