Freigeben über


BindingContext Klasse

Definition

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, Positionanstatt 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.

Gilt für:

Weitere Informationen