BindingContext Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Zarządza kolekcją BindingManagerBase obiektów dla dowolnego obiektu dziedziczonego Control z klasy.
public ref class BindingContext : System::Collections::ICollection
public class BindingContext : System.Collections.ICollection
type BindingContext = class
interface ICollection
interface IEnumerable
Public Class BindingContext
Implements ICollection
- Dziedziczenie
-
BindingContext
- Implementuje
Przykłady
Poniższy przykład kodu tworzy cztery Binding obiekty, aby powiązać pięć kontrolek — kontrolki i cztery TextBox — z kilkoma DateTimePicker źródłami danych. Element BindingContext jest następnie używany do pobierania BindingManagerBase elementu dla każdego źródła danych.
void BindControls()
{
/* Create two Binding objects for the first two TextBox
controls. The data-bound property for both controls
is the Text property. The data source is a DataSet
(ds). The data member is a navigation path in the form:
"TableName.ColumnName". */
text1->DataBindings->Add( gcnew Binding( "Text",ds,"customers.custName" ) );
text2->DataBindings->Add( gcnew Binding( "Text",ds,"customers.custID" ) );
/* Bind the DateTimePicker control by adding a new Binding.
The data member of the DateTimePicker is a navigation path:
TableName.RelationName.ColumnName string. */
DateTimePicker1->DataBindings->Add( gcnew Binding( "Value",ds,"customers.CustToOrders.OrderDate" ) );
/* Add event delegates for the Parse and Format events to a
new Binding object, and add the object to the third
TextBox control's BindingsCollection. The delegates
must be added before adding the Binding to the
collection; otherwise, no formatting occurs until
the Current object of the BindingManagerBase for
the data source changes. */
Binding^ b = gcnew Binding( "Text",ds,"customers.custToOrders.OrderAmount" );
b->Parse += gcnew ConvertEventHandler( this, &Form1::CurrencyStringToDecimal );
b->Format += gcnew ConvertEventHandler( this, &Form1::DecimalToCurrencyString );
text3->DataBindings->Add( b );
// Get the BindingManagerBase for the Customers table.
bmCustomers = this->BindingContext[ ds,"Customers" ];
/* Get the BindingManagerBase for the Orders table using the
RelationName. */
bmOrders = this->BindingContext[ds, "customers.CustToOrders"];
/* Bind the fourth TextBox control's Text property to the
third control's Text property. */
text4->DataBindings->Add( "Text", text3, "Text" );
}
protected void BindControls()
{
/* Create two Binding objects for the first two TextBox
controls. The data-bound property for both controls
is the Text property. The data source is a DataSet
(ds). The data member is a navigation path in the form:
"TableName.ColumnName". */
text1.DataBindings.Add(new Binding
("Text", ds, "customers.custName"));
text2.DataBindings.Add(new Binding
("Text", ds, "customers.custID"));
/* Bind the DateTimePicker control by adding a new Binding.
The data member of the DateTimePicker is a navigation path:
TableName.RelationName.ColumnName string. */
DateTimePicker1.DataBindings.Add(new
Binding("Value", ds, "customers.CustToOrders.OrderDate"));
/* Add event delegates for the Parse and Format events to a
new Binding object, and add the object to the third
TextBox control's BindingsCollection. The delegates
must be added before adding the Binding to the
collection; otherwise, no formatting occurs until
the Current object of the BindingManagerBase for
the data source changes. */
Binding b = new Binding
("Text", ds, "customers.custToOrders.OrderAmount");
b.Parse+=new ConvertEventHandler(CurrencyStringToDecimal);
b.Format+=new ConvertEventHandler(DecimalToCurrencyString);
text3.DataBindings.Add(b);
// Get the BindingManagerBase for the Customers table.
bmCustomers = this.BindingContext [ds, "Customers"];
/* Get the BindingManagerBase for the Orders table using the
RelationName. */
bmOrders = this.BindingContext[ds, "customers.CustToOrders"];
/* Bind the fourth TextBox control's Text property to the
third control's Text property. */
text4.DataBindings.Add("Text", text3, "Text");
}
Protected Sub BindControls()
' Create two Binding objects for the first two TextBox
' controls. The data-bound property for both controls
' is the Text property. The data source is a DataSet
' (ds). The data member is the string
' "TableName.ColumnName".
text1.DataBindings.Add(New Binding _
("Text", ds, "customers.custName"))
text2.DataBindings.Add(New Binding _
("Text", ds, "customers.custID"))
' Bind the DateTimePicker control by adding a new Binding.
' The data member of the DateTimePicker is a
' TableName.RelationName.ColumnName string.
DateTimePicker1.DataBindings.Add(New Binding _
("Value", ds, "customers.CustToOrders.OrderDate"))
' Add event delegates for the Parse and Format events to a
' new Binding object, and add the object to the third
' TextBox control's BindingsCollection. The delegates
' must be added before adding the Binding to the
' collection; otherwise, no formatting occurs until
' the Current object of the BindingManagerBase for
' the data source changes.
Dim b As Binding = New Binding _
("Text", ds, "customers.custToOrders.OrderAmount")
AddHandler b.Parse, New ConvertEventHandler(AddressOf CurrencyStringToDecimal)
AddHandler b.Format, New ConvertEventHandler(AddressOf DecimalToCurrencyString)
text3.DataBindings.Add(b)
' Get the BindingManagerBase for the Customers table.
bmCustomers = Me.BindingContext(ds, "Customers")
' Get the BindingManagerBase for the Orders table using the
' RelationName.
bmOrders = Me.BindingContext(ds, "customers.CustToOrders")
' Bind the fourth TextBox control's Text property to the
' third control's Text property.
text4.DataBindings.Add("Text", text3, "Text")
End Sub
Uwagi
Każdy formularz systemu Windows ma co najmniej jeden BindingContext obiekt, który zarządza BindingManagerBase obiektami formularza. Ponieważ klasa jest abstrakcyjna BindingManagerBase , zwracany typ Item[] właściwości to a CurrencyManager lub PropertyManager. Jeśli źródło danych jest obiektem, który może zwrócić tylko jedną właściwość (zamiast listy obiektów), Type element jest .PropertyManager Jeśli na przykład określisz TextBox jako źródło danych, PropertyManager zwracany jest element . Z drugiej strony, jeśli źródło danych jest obiektem, który implementuje IList element lub IBindingList, CurrencyManager jest zwracany.
Dla każdego źródła danych w formularzu systemu Windows istnieje jeden CurrencyManager element lub PropertyManager. Ze względu na to, że może istnieć wiele źródeł danych skojarzonych z formularzem systemu Windows, BindingContext program umożliwia pobranie dowolnego określonego CurrencyManager źródła danych skojarzonego ze źródłem danych.
Uwaga
W przypadku korzystania z Item[] właściwości metoda tworzy nowąBindingManagerBase, BindingContext jeśli jeszcze nie istnieje. Może to prowadzić do pomyłek, ponieważ zwrócony obiekt może nie zarządzać listą (lub dowolną listą), którą zamierzasz. Aby zapobiec zwracaniu nieprawidłowego BindingManagerBaseelementu , użyj Contains metody , aby określić, czy zamierzony BindingManagerBase już istnieje.
Jeśli używasz kontrolki kontenera, takiej jak GroupBox, Panellub TabControl, do przechowywania kontrolek powiązanych z danymi, możesz utworzyć BindingContext obiekt dla tylko tej kontrolki kontenera i jej kontrolek. Następnie każda część formularza może być zarządzana własnymi BindingManagerBaseelementami . Zobacz konstruktor, BindingContext aby uzyskać więcej informacji na temat tworzenia wielu BindingManagerBase obiektów dla tego samego źródła danych.
Jeśli dodasz kontrolkę TextBox do formularza i powiążesz ją z kolumną tabeli w zestawie danych, kontrolka komunikuje się z BindingContext formularzem. Z kolei element BindingContext, komunikuje się ze specyficznym CurrencyManager dla tego skojarzenia danych. Jeśli wykonano zapytanie dotyczące Position
właściwości CurrencyManager, raportuje bieżący rekord dla powiązania tej TextBox kontrolki. W poniższym przykładzie kodu kontrolka TextBox jest powiązana z FirstName
kolumną Customers
tabeli w dataSet1
zestawie danych za pośrednictwem BindingContext formularza, na który się znajduje.
TextBox1.DataBindings.Add("Text", dataSet1, "Customers.FirstName")
textBox1.DataBindings.Add("Text", dataSet1, "Customers.FirstName");
textBox1->DataBindings->Add("Text", dataSet1, "Customers.FirstName");
Możesz dodać drugą TextBox kontrolkę (TextBox2
) do formularza i powiązać ją z kolumną LastName
Customers
tabeli w tym samym zestawie danych. Funkcja BindingContext jest świadoma pierwszego powiązania (TextBox1
do Customers.FirstName
), więc będzie używać tego samego CurrencyManagerelementu , co oba pola tekstowe są powiązane z tym samym zestawem danych (DataSet1
).
TextBox2.DataBindings.Add("Text", dataSet1, "Customers.LastName")
textBox2.DataBindings.Add("Text", dataSet1, "Customers.LastName");
textBox2->DataBindings->Add("Text", dataSet1, "Customers.LastName");
Jeśli powiążesz z TextBox2
innym zestawem danych, BindingContext program tworzy drugi CurrencyManagerzestaw danych i zarządza nim.
Ważne jest, aby zachować spójność sposobu ustawiania DataSource właściwości i DisplayMember . W przeciwnym razie BindingContext tworzy wiele menedżerów walut dla tego samego zestawu danych, co powoduje błędy. Poniższy przykład kodu przedstawia kilka sposobów ustawiania właściwości i skojarzonych z BindingContext nimi obiektów. Właściwości można ustawić przy użyciu jednej z następujących metod, o ile cały kod jest spójny.
ComboBox1.DataSource = DataSet1
ComboBox1.DisplayMember = "Customers.FirstName"
Me.BindingContext(dataSet1, "Customers").Position = 1
comboBox1.DataSource = DataSet1;
comboBox1.DisplayMember = "Customers.FirstName";
this.BindingContext[dataSet1, "Customers"].Position = 1;
comboBox1->DataSource = dataSet1;
comboBox1->DisplayMember = "Customers.FirstName";
this->BindingContext->get_Item(dataSet1, "Customers")->Position = 1;
ComboBox1.DataSource = DataSet1.Customers
ComboBox1.DisplayMember = "FirstName"
Me.BindingContext(dataSet1.Customers).Position = 1
comboBox1.DataSource = DataSet1.Customers;
comboBox1.DisplayMember = "FirstName";
this.BindingContext[dataSet1.Customers].Position = 1;
comboBox1->DataSource = dataSet1->Customers;
comboBox1->DisplayMember = "FirstName";
this->BindingContext->get_Item(dataSet1->Customers)->Position = 1;
Uwaga
Większość aplikacji Windows Forms wiąże się za pomocą klasy BindingSource. Składnik BindingSource hermetyzuje element CurrencyManager i uwidacznia CurrencyManager interfejs programowania. W przypadku użycia BindingSource elementu dla powiązania należy użyć elementów członkowskich uwidocznionych przez BindingSource element , aby manipulować "walutą" (czyli Position
) zamiast przechodzić przez element BindingContext.
Konstruktory
BindingContext() |
Inicjuje nowe wystąpienie klasy BindingContext. |
Właściwości
IsReadOnly |
Pobiera wartość wskazującą, czy kolekcja jest przeznaczona tylko do odczytu. |
Item[Object, String] |
Pobiera element BindingManagerBase skojarzony z określonym źródłem danych i elementem członkowskim danych. |
Item[Object] |
Pobiera element BindingManagerBase skojarzony z określonym źródłem danych. |
Metody
Add(Object, BindingManagerBase) |
BindingManagerBase Dodaje element skojarzony z określonym źródłem danych do kolekcji. |
AddCore(Object, BindingManagerBase) |
BindingManagerBase Dodaje element skojarzony z określonym źródłem danych do kolekcji. |
Clear() |
Czyści kolekcję wszystkich BindingManagerBase obiektów. |
ClearCore() |
Czyści kolekcję. |
Contains(Object) |
Pobiera wartość wskazującą, czy BindingContext element zawiera BindingManagerBase skojarzony z określonym źródłem danych. |
Contains(Object, String) |
Pobiera wartość wskazującą, czy BindingContext element zawiera BindingManagerBase element skojarzony z określonym źródłem danych i elementem członkowskim danych. |
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetType() |
Type Pobiera wartość bieżącego wystąpienia. (Odziedziczone po Object) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
OnCollectionChanged(CollectionChangeEventArgs) |
CollectionChanged Zgłasza zdarzenie. |
Remove(Object) |
Usuwa BindingManagerBase obiekt skojarzony z określonym źródłem danych. |
RemoveCore(Object) |
Usuwa BindingManagerBase element skojarzony z określonym źródłem danych. |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
UpdateBinding(BindingContext, Binding) |
Kojarzy element Binding z nowym BindingContextelementem . |
Zdarzenia
CollectionChanged |
Zawsze podnosi wartość NotImplementedException w przypadku obsługi. |
Jawne implementacje interfejsu
ICollection.CopyTo(Array, Int32) |
Kopiuje elementy kolekcji do określonej tablicy, zaczynając od indeksu kolekcji. |
ICollection.Count |
Pobiera całkowitą liczbę CurrencyManager obiektów zarządzanych przez obiekt BindingContext. |
ICollection.IsSynchronized |
Pobiera wartość wskazującą, czy kolekcja jest zsynchronizowana. |
ICollection.SyncRoot |
Pobiera obiekt do użycia na potrzeby synchronizacji (bezpieczeństwo wątków). |
IEnumerable.GetEnumerator() |
Pobiera moduł wyliczający dla kolekcji. |
Metody rozszerzania
Cast<TResult>(IEnumerable) |
Rzutuje elementy obiektu IEnumerable na określony typ. |
OfType<TResult>(IEnumerable) |
Filtruje elementy IEnumerable elementu na podstawie określonego typu. |
AsParallel(IEnumerable) |
Umożliwia równoległość zapytania. |
AsQueryable(IEnumerable) |
Konwertuje element IEnumerable na .IQueryable |