BindingContext Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Gestisce la raccolta di oggetti BindingManagerBase per qualsiasi oggetto che eredita dalla classe Control.
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
- Ereditarietà
-
BindingContext
- Implementazioni
Esempio
Nell'esempio di codice seguente vengono creati quattro Binding oggetti per associare cinque controlli, ovvero un DateTimePicker e quattro TextBox controlli, a diverse origini dati. Viene BindingContext quindi usato per ottenere per BindingManagerBase ogni origine dati.
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
Commenti
Ogni Windows Form ha almeno un BindingContext oggetto che gestisce gli BindingManagerBase oggetti per il form. Poiché la BindingManagerBase classe è astratta, il tipo restituito della Item[] proprietà è o CurrencyManager .PropertyManager Se l'origine dati è un oggetto che può restituire solo una singola proprietà (anziché un elenco di oggetti), è Type un oggetto PropertyManager. Ad esempio, se si specifica un TextBox oggetto come origine dati, viene restituito un oggetto PropertyManager . D'altra parte, se l'origine dati è un oggetto che implementa IList o IBindingList, viene restituito un oggetto CurrencyManager .
Per ogni origine dati in Windows Form, è presente un singolo CurrencyManager oggetto o PropertyManager. Poiché possono essere presenti più origini dati associate a un Windows Form, consente BindingContext di recuperare qualsiasi particolare CurrencyManager oggetto associato a un'origine dati.
Nota
Quando si usa la Item[] proprietà , crea BindingContext un nuovo BindingManagerBase oggetto se non ne esiste già uno. Ciò può causare confusione, perché l'oggetto restituito potrebbe non gestire l'elenco (o qualsiasi elenco) che si intende. Per impedire la restituzione di un valore non valido BindingManagerBase, utilizzare il Contains metodo per determinare se l'oggetto previsto BindingManagerBase esiste già.
Se si usa un controllo contenitore, ad esempio GroupBox, Panelo TabControl, per contenere controlli associati a dati, è possibile creare un BindingContext oggetto solo per il controllo contenitore e i relativi controlli. Quindi, ogni parte del modulo può essere gestita dal proprio BindingManagerBase. Per altre informazioni sulla creazione di più BindingManagerBase oggetti per la stessa origine dati, vedere il BindingContext costruttore.
Se si aggiunge un TextBox controllo a una maschera e lo si associa a una colonna di una tabella in un set di dati, il controllo comunica con l'oggetto BindingContext di tale modulo. L'oggetto BindingContext, a sua volta, comunica con l'oggetto specifico CurrencyManager per l'associazione di dati. Se si esegue una query sulla Position
proprietà di CurrencyManager, verrà restituito il record corrente per l'associazione di tale TextBox controllo. Nell'esempio di codice seguente, un TextBox controllo è associato alla FirstName
colonna di una Customers
tabella nel dataSet1
set di dati tramite per BindingContext il modulo su cui si trova.
TextBox1.DataBindings.Add("Text", dataSet1, "Customers.FirstName")
textBox1.DataBindings.Add("Text", dataSet1, "Customers.FirstName");
textBox1->DataBindings->Add("Text", dataSet1, "Customers.FirstName");
È possibile aggiungere un secondo TextBox controllo (TextBox2
) al form e associarlo alla LastName
colonna della Customers
tabella nello stesso set di dati. è BindingContext a conoscenza del primo binding (TextBox1
a Customers.FirstName
), quindi userebbe lo stesso CurrencyManager, perché entrambe le caselle di testo sono associate allo stesso set di dati (DataSet1
).
TextBox2.DataBindings.Add("Text", dataSet1, "Customers.LastName")
textBox2.DataBindings.Add("Text", dataSet1, "Customers.LastName");
textBox2->DataBindings->Add("Text", dataSet1, "Customers.LastName");
Se si esegue l'associazione TextBox2
a un set di dati diverso, crea BindingContext e gestisce un secondo CurrencyManager.
È importante essere coerenti sulla modalità di impostazione delle DataSource proprietà e DisplayMember ; in caso contrario, BindingContext crea più gestori di valuta per lo stesso set di dati, che genera errori. L'esempio di codice seguente illustra alcuni modi per impostare le proprietà e i relativi oggetti associati BindingContext . È possibile impostare le proprietà usando uno dei metodi seguenti, purché il codice sia coerente.
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;
Nota
La maggior parte delle applicazioni Windows Forms viene associata tramite un oggetto BindingSource. Il BindingSource componente incapsula un CurrencyManager oggetto ed espone l'interfaccia di CurrencyManager programmazione. Quando si usa un BindingSource oggetto per l'associazione, è consigliabile usare i membri esposti da BindingSource per modificare la "valuta", ovvero Position
, anziché passare attraverso .BindingContext
Costruttori
BindingContext() |
Inizializza una nuova istanza della classe BindingContext. |
Proprietà
IsReadOnly |
Ottiene un valore che indica se la raccolta è di sola lettura. |
Item[Object, String] |
Ottiene l'oggetto BindingManagerBase associato all'origine e al membro dati specificati. |
Item[Object] |
Ottiene l'oggetto BindingManagerBase associato all'origine dati specificata. |
Metodi
Add(Object, BindingManagerBase) |
Aggiunge all'insieme l'oggetto BindingManagerBase associato a una specifica origine dati. |
AddCore(Object, BindingManagerBase) |
Aggiunge all'insieme l'oggetto BindingManagerBase associato a una specifica origine dati. |
Clear() |
Cancella dall'insieme qualunque oggetto BindingManagerBase. |
ClearCore() |
Cancella la raccolta. |
Contains(Object) |
Ottiene un valore che indica se BindingContext contiene l'oggetto BindingManagerBase associato all'origine dati specificata. |
Contains(Object, String) |
Ottiene un valore che indica se BindingContext contiene l'oggetto BindingManagerBase associato all'origine e al membro dati specificati. |
Equals(Object) |
Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object) |
GetHashCode() |
Funge da funzione hash predefinita. (Ereditato da Object) |
GetType() |
Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object) |
MemberwiseClone() |
Crea una copia superficiale dell'oggetto Object corrente. (Ereditato da Object) |
OnCollectionChanged(CollectionChangeEventArgs) |
Genera l'evento CollectionChanged. |
Remove(Object) |
Elimina l'oggetto BindingManagerBase associato all'origine dati specificata. |
RemoveCore(Object) |
Rimuove l'oggetto BindingManagerBase associato all'origine dati specificata. |
ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |
UpdateBinding(BindingContext, Binding) |
Associa un oggetto Binding a un nuovo oggetto BindingContext. |
Eventi
CollectionChanged |
Genera sempre un oggetto NotImplementedException durante la gestione. |
Implementazioni dell'interfaccia esplicita
ICollection.CopyTo(Array, Int32) |
Copia gli elementi della raccolta in una matrice specificata, a partire dall'indice della raccolta. |
ICollection.Count |
Ottiene il numero complessivo di oggetti CurrencyManager gestiti da BindingContext. |
ICollection.IsSynchronized |
Ottiene un valore che indica se la raccolta è sincronizzata. |
ICollection.SyncRoot |
Ottiene un oggetto da usare per la sincronizzazione (thread safety). |
IEnumerable.GetEnumerator() |
Ottiene un enumeratore per la raccolta. |
Metodi di estensione
Cast<TResult>(IEnumerable) |
Esegue il cast degli elementi di un oggetto IEnumerable nel tipo specificato. |
OfType<TResult>(IEnumerable) |
Filtra gli elementi di un oggetto IEnumerable in base a un tipo specificato. |
AsParallel(IEnumerable) |
Consente la parallelizzazione di una query. |
AsQueryable(IEnumerable) |
Converte un oggetto IEnumerable in un oggetto IQueryable. |