BindingContext Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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. |