BindingContext Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Verwaltet die Auflistung von BindingManagerBase-Objekten für ein beliebiges Objekt, das von der Control-Klasse erbt.
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
- Vererbung
-
BindingContext
- Implementiert
Beispiele
Im folgenden Codebeispiel werden vier Binding Objekte erstellt, um fünf Steuerelemente - ein DateTimePicker - und vier TextBox Steuerelemente - an mehrere Datenquellen zu binden. Wird BindingContext dann verwendet, um die BindingManagerBase für jede Datenquelle abzurufen.
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
Hinweise
Jedes Windows Form-Objekt verfügt über mindestens ein BindingContext Objekt, das die BindingManagerBase Objekte für das Formular verwaltet. Da die BindingManagerBase Klasse abstrakt ist, ist der Rückgabetyp der Item[] -Eigenschaft entweder ein CurrencyManager oder ein PropertyManager. Wenn es sich bei der Datenquelle um ein -Objekt handelt, das nur eine einzelne Eigenschaft (anstelle einer Liste von -Objekten) zurückgeben kann, ist der Type ein PropertyManager. Wenn Sie beispielsweise ein TextBox als Datenquelle angeben, wird ein PropertyManager zurückgegeben. Wenn es sich bei der Datenquelle um ein Objekt handelt, das oder IBindingListimplementiertIList, wird ein CurrencyManager zurückgegeben.
Für jede Datenquelle in einem Windows Form gibt es eine einzelne CurrencyManager oder PropertyManager. Da einer Windows Form möglicherweise mehrere Datenquellen zugeordnet sind, BindingContext können Sie mit eine bestimmte CurrencyManager Datenquelle abrufen.
Hinweis
Wenn Sie die Item[] -Eigenschaft verwenden, wird eine neue BindingManagerBase erstellt, BindingContext sofern noch keine vorhanden ist. Dies kann zu verwirrung führen, da das zurückgegebene Objekt möglicherweise die gewünschte Liste (oder eine beliebige Liste) nicht verwaltet. Um zu verhindern, dass ein ungültiges BindingManagerBasezurückgegeben wird, verwenden Sie die Contains -Methode, um zu bestimmen, ob die beabsichtigte BindingManagerBase bereits vorhanden ist.
Wenn Sie ein Containersteuerelement wie ein GroupBox, Paneloder TabControlverwenden, um datengebundene Steuerelemente zu enthalten, können Sie ein BindingContext für nur dieses Containersteuerelement und seine Steuerelemente erstellen. Anschließend kann jeder Teil des Formulars durch einen eigenen BindingManagerBaseverwaltet werden. Weitere Informationen zum Erstellen mehrerer BindingManagerBase Objekte für dieselbe Datenquelle finden Sie im BindingContext Konstruktor.
Wenn Sie einem Formular ein TextBox Steuerelement hinzufügen und es an eine Spalte einer Tabelle in einem Dataset binden, kommuniziert das Steuerelement mit dem BindingContext dieses Formulars. Der BindingContextwiederum spricht mit dem spezifischen CurrencyManager für diese Datenzuordnung. Wenn Sie die Position
-Eigenschaft von CurrencyManagerabgefragt haben, wird der aktuelle Datensatz für die Bindung dieses Steuerelements TextBox gemeldet. Im folgenden Codebeispiel wird ein TextBox Steuerelement an die FirstName
Spalte einer Customers
Tabelle im dataSet1
Dataset gebunden, indem BindingContext für das Formular, in dem es sich befindet, verwendet wird.
TextBox1.DataBindings.Add("Text", dataSet1, "Customers.FirstName")
textBox1.DataBindings.Add("Text", dataSet1, "Customers.FirstName");
textBox1->DataBindings->Add("Text", dataSet1, "Customers.FirstName");
Sie können dem Formular ein zweites TextBox Steuerelement (TextBox2
) hinzufügen und an die LastName
Spalte der Customers
Tabelle im selben Dataset binden. Die BindingContext ist der ersten Bindung bekannt (TextBox1
an Customers.FirstName
), daher würde es dasselbe CurrencyManagerverwenden, da beide Textfelder an dasselbe Dataset (DataSet1
) gebunden sind.
TextBox2.DataBindings.Add("Text", dataSet1, "Customers.LastName")
textBox2.DataBindings.Add("Text", dataSet1, "Customers.LastName");
textBox2->DataBindings->Add("Text", dataSet1, "Customers.LastName");
Wenn Sie an ein anderes Dataset binden TextBox2
, erstellt und verwaltet das BindingContext eine zweite CurrencyManager.
Es ist wichtig, konsistent zu sein, BindingContext wie Sie die DataSource Eigenschaften und DisplayMember festlegen. Andernfalls werden mehrere Währungsmanager für dasselbe Dataset erstellt, was zu Fehlern führt. Das folgende Codebeispiel zeigt einige Möglichkeiten zum Festlegen der Eigenschaften und der zugehörigen BindingContext Objekte. Sie können die Eigenschaften mit einer der folgenden Methoden festlegen, solange Sie im gesamten Code konsistent sind.
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;
Hinweis
Die meisten Windows Forms Anwendungen binden über ein BindingSource. Die BindingSource -Komponente kapselt ein CurrencyManager und macht die CurrencyManager Programmierschnittstelle verfügbar. Wenn Sie ein BindingSource für die Bindung verwenden, sollten Sie die von verfügbar gemachten Elemente verwenden, um " BindingSource Währung" (d. h. ) zu bearbeiten, Position
anstatt die BindingContextzu durchlaufen.
Konstruktoren
BindingContext() |
Initialisiert eine neue Instanz der BindingContext-Klasse. |
Eigenschaften
IsReadOnly |
Ruft einen Wert ab, der angibt, ob die Auflistung schreibgeschützt ist. |
Item[Object, String] |
Ruft eine BindingManagerBase ab, die der angegebenen Datenquelle und dem angegebenen Datenmember zugeordnet ist. |
Item[Object] |
Ruft die BindingManagerBase ab, die der angegebenen Datenquelle zugeordnet ist. |
Methoden
Add(Object, BindingManagerBase) |
Fügt der Auflistung die BindingManagerBase hinzu, die einer bestimmten Datenquelle zugeordnet ist. |
AddCore(Object, BindingManagerBase) |
Fügt der Auflistung die BindingManagerBase hinzu, die einer bestimmten Datenquelle zugeordnet ist. |
Clear() |
Löscht sämtliche BindingManagerBase-Objekte aus der Auflistung. |
ClearCore() |
Löscht die Auflistung. |
Contains(Object) |
Ruft einen Wert ab, der angibt, ob BindingContext die der angegebenen Datenquelle zugeordnete BindingManagerBase enthält. |
Contains(Object, String) |
Ruft einen Wert ab, der angibt, ob BindingContext die der angegebenen Datenquelle und dem angegebenen Datenmember zugeordnete BindingManagerBase enthält. |
Equals(Object) |
Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist. (Geerbt von Object) |
GetHashCode() |
Fungiert als Standardhashfunktion. (Geerbt von Object) |
GetType() |
Ruft den Type der aktuellen Instanz ab. (Geerbt von Object) |
MemberwiseClone() |
Erstellt eine flache Kopie des aktuellen Object. (Geerbt von Object) |
OnCollectionChanged(CollectionChangeEventArgs) |
Löst das CollectionChanged-Ereignis aus. |
Remove(Object) |
Löscht die der angegebenen Datenquelle zugeordnete BindingManagerBase. |
RemoveCore(Object) |
Entfernt die der angegebenen Datenquelle zugeordnete BindingManagerBase. |
ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
UpdateBinding(BindingContext, Binding) |
Ordnet einem neuen Binding ein BindingContext zu. |
Ereignisse
CollectionChanged |
Löst beim Behandeln immer eine NotImplementedException aus. |
Explizite Schnittstellenimplementierungen
ICollection.CopyTo(Array, Int32) |
Kopiert die Elemente der Auflistung beginnend am Auflistungsindex in das angegebene Array. |
ICollection.Count |
Ruft die Gesamtzahl der CurrencyManager-Objekte ab, die vom BindingContext verwaltet werden. |
ICollection.IsSynchronized |
Ruft einen Wert ab, der angibt, ob die Auflistung synchronisiert ist. |
ICollection.SyncRoot |
Ruft ein Objekt ab, das für die Synchronisierung (Threadsicherheit) verwendet werden soll. |
IEnumerable.GetEnumerator() |
Ruft einen Enumerator für die Auflistung ab. |
Erweiterungsmethoden
Cast<TResult>(IEnumerable) |
Wandelt die Elemente eines IEnumerable in den angegebenen Typ um |
OfType<TResult>(IEnumerable) |
Filtert die Elemente eines IEnumerable anhand eines angegebenen Typs |
AsParallel(IEnumerable) |
Ermöglicht die Parallelisierung einer Abfrage. |
AsQueryable(IEnumerable) |
Konvertiert einen IEnumerable in einen IQueryable. |