Sdílet prostřednictvím


BindingContext Třída

Definice

Spravuje kolekci BindingManagerBase objektů pro každý objekt, který dědí z Control třídy .

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
Dědičnost
BindingContext
Implementuje

Příklady

Následující příklad kódu vytvoří čtyři Binding objekty pro vazbu pěti ovládacích prvků – DateTimePicker a čtyř TextBox ovládacích prvků – s několika zdroji dat. Potom BindingContext se použije k získání hodnoty BindingManagerBase pro každý zdroj dat.

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

Poznámky

Každý formulář windows má alespoň jeden BindingContext objekt, který spravuje BindingManagerBase objekty formuláře. Vzhledem k tomu, že BindingManagerBase je třída abstraktní, návratový typ Item[] vlastnosti je buď a CurrencyManager , nebo PropertyManager. Pokud je zdrojem dat objekt, který může vrátit pouze jednu vlastnost (místo seznamu objektů), Type je objekt .PropertyManager Pokud například jako zdroj dat zadáte , TextBox vrátí se hodnota .PropertyManager Na druhou stranu, pokud zdroj dat je objekt, který implementuje IList nebo IBindingList, CurrencyManager se vrátí .

Pro každý zdroj dat ve formuláři Windows Forms existuje jeden CurrencyManager nebo PropertyManager. Vzhledem k tomu, že k formuláři Windows Form může být přidruženo více zdrojů dat, BindingContext umožňuje vám nástroj načíst všechny konkrétní CurrencyManager přidružené ke zdroji dat.

Poznámka

Při použití Item[] vlastnosti vytvoří novýBindingManagerBase, BindingContext pokud ještě neexistuje. To může vést k určitým nejasnostem, protože vrácený objekt nemusí spravovat seznam (nebo jakýkoli seznam), který chcete. Chcete-li zabránit vrácení neplatné BindingManagerBase, pomocí Contains metody zjistěte, zda zamýšlený BindingManagerBase již existuje.

Pokud používáte kontejnerový ovládací prvek, jako GroupBoxje , Panelnebo TabControl, k tomu, aby obsahoval ovládací prvky vázané na data, můžete vytvořit BindingContext pouze pro tento ovládací prvek kontejneru a jeho ovládací prvky. Každou část formuláře pak můžete spravovat pomocí vlastního BindingManagerBase. BindingContext Další informace o vytváření více BindingManagerBase objektů pro stejný zdroj dat najdete v konstruktoru.

Pokud přidáte TextBox ovládací prvek do formuláře a svážete ho se sloupcem tabulky v datové sadě, bude tento ovládací prvek komunikovat s BindingContext objektem daného formuláře. Naopak BindingContext, mluví s konkrétními CurrencyManager daty pro dané přidružení dat. Pokud byste dotazovali Position vlastnost objektu CurrencyManager, nahlásil by aktuální záznam pro vazbu tohoto TextBox ovládacího prvku. V následujícím příkladu TextBox kódu je ovládací prvek vázaný na FirstName sloupec Customers tabulky v dataSet1 datové sadě prostřednictvím BindingContext pro formulář, ve který je.

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

Do formuláře můžete přidat druhý TextBox ovládací prvek (TextBox2) a svázat ho se LastName sloupcem Customers tabulky ve stejné datové sadě. Objekt BindingContext ví o první vazbu (TextBox1 na Customers.FirstName), takže použije stejnou CurrencyManager, protože obě textová pole jsou svázaná se stejnou datovou sadou (DataSet1).

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

Pokud vytvoříte vazbu TextBox2 na jinou datovou sadu, BindingContext objekt vytvoří a spravuje sekundu CurrencyManager.

Je důležité, abyste měli konzistentní nastavení DataSource vlastností a DisplayMember . V opačném případě BindingContext vytvoří více správců měn pro stejnou datovou sadu, což vede k chybám. Následující příklad kódu ukazuje několik způsobů, jak nastavit vlastnosti a jejich přidružené BindingContext objekty. Vlastnosti můžete nastavit pomocí některé z následujících metod, pokud jste konzistentní v celém kódu.

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;  

Poznámka

Většina aplikací model Windows Forms svázání prostřednictvím .BindingSource Komponenta BindingSource zapouzdřuje CurrencyManager a zpřístupňuje CurrencyManager programovací rozhraní. Při použití objektu BindingSource pro vazbu byste měli používat členy vystavené objektem BindingSource k manipulaci s "měnou" (tj Position. ) a neprocházet přes BindingContext.

Konstruktory

BindingContext()

Inicializuje novou instanci BindingContext třídy .

Vlastnosti

IsReadOnly

Získá hodnotu, která udává, zda je kolekce určena jen pro čtení.

Item[Object, String]

Získá, BindingManagerBase který je přidružen k zadanému zdroji dat a datovému členu.

Item[Object]

Získá, BindingManagerBase která je přidružena k zadanému zdroji dat.

Metody

Add(Object, BindingManagerBase)

Přidá do BindingManagerBase kolekce objekt přidružený ke konkrétnímu zdroji dat.

AddCore(Object, BindingManagerBase)

Přidá do BindingManagerBase kolekce objekt přidružený ke konkrétnímu zdroji dat.

Clear()

Vymaže kolekci všech BindingManagerBase objektů.

ClearCore()

Vymaže kolekci.

Contains(Object)

Získá hodnotu označující, zda BindingContext obsahuje BindingManagerBase přidružený k zadanému zdroji dat.

Contains(Object, String)

Získá hodnotu označující, zda BindingContext obsahuje BindingManagerBase přidružený k zadanému zdroji dat a datovému členu.

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetType()

Type Získá z aktuální instance.

(Zděděno od Object)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
OnCollectionChanged(CollectionChangeEventArgs)

CollectionChanged Vyvolá událost.

Remove(Object)

Odstraní objekt BindingManagerBase přidružený k zadanému zdroji dat.

RemoveCore(Object)

Odebere objekt BindingManagerBase přidružený k zadanému zdroji dat.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)
UpdateBinding(BindingContext, Binding)

Přidruží k Binding novému BindingContext.

Událost

CollectionChanged

Při zpracování vždy vyvolá hodnotu NotImplementedException .

Explicitní implementace rozhraní

ICollection.CopyTo(Array, Int32)

Zkopíruje prvky kolekce do zadaného pole počínaje indexem kolekce.

ICollection.Count

Získá celkový počet CurrencyManager objektů spravovaných objektem BindingContext.

ICollection.IsSynchronized

Získá hodnotu označující, zda je kolekce synchronizována.

ICollection.SyncRoot

Získá objekt k použití pro synchronizaci (zabezpečení vlákna).

IEnumerable.GetEnumerator()

Získá enumerátor pro kolekci.

Metody rozšíření

Cast<TResult>(IEnumerable)

Přetypuje prvky objektu na IEnumerable zadaný typ.

OfType<TResult>(IEnumerable)

Filtruje prvky objektu IEnumerable na základě zadaného typu.

AsParallel(IEnumerable)

Umožňuje paralelizaci dotazu.

AsQueryable(IEnumerable)

Převede objekt na IEnumerableIQueryable.

Platí pro

Viz také