BindingContext Klass

Definition

Hanterar samlingen med BindingManagerBase objekt för alla objekt som ärver från Control klassen.

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
Arv
BindingContext
Implementeringar

Exempel

I följande kodexempel skapas fyra Binding objekt för att binda fem kontroller – en DateTimePicker och fyra TextBox kontroller – till flera datakällor. BindingContext Används sedan för att hämta BindingManagerBase för varje datakälla.

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

Kommentarer

Varje Windows formulär har minst ett BindingContext objekt som hanterar BindingManagerBase objekt för formuläret. BindingManagerBase Eftersom klassen är abstrakt är returtypen för Item[] egenskapen antingen en CurrencyManager eller en PropertyManager. Om datakällan är ett objekt som bara kan returnera en enda egenskap (i stället för en lista med objekt) Type är det en PropertyManager. Om du till exempel anger en TextBox som datakälla returneras en PropertyManager . Å andra sidan, om datakällan är ett objekt som implementerar IList eller IBindingList, returneras en CurrencyManager .

För varje datakälla i ett Windows formulär finns det en enda CurrencyManager eller PropertyManager. Eftersom det kan finnas flera datakällor som är associerade med ett Windows formulär kan du med BindingContext hämta alla specifika CurrencyManager som är associerade med en datakälla.

Note

När du använder egenskapen Item[]BindingContext skapas en ny BindingManagerBase om den inte redan finns. Detta kan leda till viss förvirring eftersom det returnerade objektet kanske inte hanterar listan (eller någon lista) som du tänker använda. Om du vill förhindra att en ogiltig BindingManagerBasereturneras använder du Contains metoden för att avgöra om den avsedda BindingManagerBase redan finns.

Om du använder en containerkontroll, till exempel en GroupBox, Paneleller TabControl, för att innehålla databundna kontroller, kan du skapa en BindingContext för just den containerkontrollen och dess kontroller. Sedan kan varje del av formuläret hanteras av sin egen BindingManagerBase. Mer information om hur du skapar flera BindingManagerBase objekt för samma datakälla finns i BindingContext konstruktorn.

Om du lägger till en TextBox kontroll i ett formulär och binder den till en kolumn i en tabell i en datauppsättning kommunicerar kontrollen med formulärets BindingContext . , BindingContexti sin tur, pratar med det specifika CurrencyManager för den dataassociationen. Om du frågade Position egenskapen för CurrencyManagerskulle den rapportera den aktuella posten för bindningen av TextBox kontrollen. I följande kodexempel är en TextBox kontroll bunden till kolumnen i FirstName en Customers tabell på datauppsättningen dataSet1BindingContext via för formuläret som den är på.

TextBox1.DataBindings.Add("Text", dataSet1, "Customers.FirstName")
textBox1.DataBindings.Add("Text", dataSet1, "Customers.FirstName");

Du kan lägga till en andra TextBox kontroll (TextBox2) i formuläret och binda den LastName till kolumnen Customers i tabellen i samma datauppsättning. Är BindingContext medveten om den första bindningen (TextBox1 till Customers.FirstName), så den skulle använda samma CurrencyManager, eftersom båda textrutorna är bundna till samma datauppsättning (DataSet1).

TextBox2.DataBindings.Add("Text", dataSet1, "Customers.LastName")
textBox2.DataBindings.Add("Text", dataSet1, "Customers.LastName");

Om du binder TextBox2 till en annan datauppsättning skapar och hanterar den BindingContext en andra CurrencyManager.

Det är viktigt att vara konsekvent när det gäller hur du anger DataSource egenskaperna och DisplayMember . Annars BindingContext skapas flera valutahanterare för samma datauppsättning, vilket resulterar i fel. I följande kodexempel visas några sätt att ange egenskaperna och deras associerade BindingContext objekt. Du kan ange egenskaperna med någon av följande metoder, så länge du är konsekvent i koden.

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.Customers
ComboBox1.DisplayMember = "FirstName"
Me.BindingContext(dataSet1.Customers).Position = 1
comboBox1.DataSource = DataSet1.Customers;
comboBox1.DisplayMember = "FirstName";
this.BindingContext[dataSet1.Customers].Position = 1;

Note

De flesta Windows Forms program binder via en BindingSource. Komponenten BindingSource kapslar in en CurrencyManager och exponerar programmeringsgränssnittet CurrencyManager . När du använder en BindingSource för bindning bör du använda de medlemmar som exponeras av BindingSource för att manipulera "valuta" (dvs. Position) i stället för att gå igenom BindingContext.

Konstruktorer

Name Description
BindingContext()

Initierar en ny instans av BindingContext klassen.

Egenskaper

Name Description
IsReadOnly

Hämtar ett värde som anger om samlingen är skrivskyddad.

Item[Object, String]

Hämtar en BindingManagerBase som är associerad med den angivna datakällan och datamedlemmen.

Item[Object]

Hämtar det BindingManagerBase som är associerat med den angivna datakällan.

Metoder

Name Description
Add(Object, BindingManagerBase)

Lägger till den BindingManagerBase associerade med en specifik datakälla i samlingen.

AddCore(Object, BindingManagerBase)

Lägger till den BindingManagerBase associerade med en specifik datakälla i samlingen.

Clear()

Rensar samlingen av alla BindingManagerBase objekt.

ClearCore()

Rensar samlingen.

Contains(Object, String)

Hämtar ett värde som anger om BindingContext innehåller den BindingManagerBase som är associerad med den angivna datakällan och datamedlemmen.

Contains(Object)

Hämtar ett värde som anger om BindingContext innehåller den BindingManagerBase som är associerad med den angivna datakällan.

Equals(Object)

Avgör om det angivna objektet är lika med det aktuella objektet.

(Ärvd från Object)
GetHashCode()

Fungerar som standard-hash-funktion.

(Ärvd från Object)
GetType()

Hämtar den aktuella instansen Type .

(Ärvd från Object)
MemberwiseClone()

Skapar en ytlig kopia av den aktuella Object.

(Ärvd från Object)
OnCollectionChanged(CollectionChangeEventArgs)

Genererar händelsen CollectionChanged .

Remove(Object)

Tar bort den BindingManagerBase som är associerad med den angivna datakällan.

RemoveCore(Object)

Tar bort den BindingManagerBase associerade med den angivna datakällan.

ToString()

Returnerar en sträng som representerar det aktuella objektet.

(Ärvd från Object)
UpdateBinding(BindingContext, Binding)

Associerar en Binding med en ny BindingContext.

Händelser

Name Description
CollectionChanged

Höjer alltid en NotImplementedException när den hanteras.

Explicita gränssnittsimplementeringar

Name Description
ICollection.CopyTo(Array, Int32)

Kopierar elementen i samlingen till en angiven matris med början vid samlingsindexet.

ICollection.Count

Hämtar det totala antalet CurrencyManager objekt som hanteras av BindingContext.

ICollection.IsSynchronized

Hämtar ett värde som anger om samlingen synkroniseras.

ICollection.SyncRoot

Hämtar ett objekt att använda för synkronisering (trådsäkerhet).

IEnumerable.GetEnumerator()

Hämtar en uppräknare för samlingen.

Tilläggsmetoder

Name Description
AsParallel(IEnumerable)

Möjliggör parallellisering av en fråga.

AsQueryable(IEnumerable)

Konverterar en IEnumerable till en IQueryable.

Cast<TResult>(IEnumerable)

Omvandlar elementen i en IEnumerable till den angivna typen.

OfType<TResult>(IEnumerable)

Filtrerar elementen i en IEnumerable baserat på en angiven typ.

Gäller för

Se även