BindingContext Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Administra la colección de objetos BindingManagerBase para cualquier objeto que herede de la clase 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
- Herencia
-
BindingContext
- Implementaciones
Ejemplos
En el ejemplo de código siguiente se crean cuatro Binding objetos para enlazar cinco controles (un DateTimePicker y cuatro TextBox controles) a varios orígenes de datos. BindingContext A continuación, se usa para obtener para BindingManagerBase cada origen de datos.
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
Comentarios
Cada Windows Forms tiene al menos un BindingContext objeto que administra los BindingManagerBase objetos del formulario. Dado que la BindingManagerBase clase es abstracta, el tipo de valor devuelto de la Item[] propiedad es o CurrencyManager .PropertyManager Si el origen de datos es un objeto que solo puede devolver una sola propiedad (en lugar de una lista de objetos), es Type .PropertyManager Por ejemplo, si especifica como TextBox origen de datos, se devuelve .PropertyManager Por otro lado, si el origen de datos es un objeto que implementa IList o IBindingList, se devuelve .CurrencyManager
Para cada origen de datos de un formulario Windows Forms, hay un único CurrencyManager o PropertyManager. Dado que puede haber varios orígenes de datos asociados a un formulario Windows Forms, BindingContext permite recuperar cualquier objeto concreto CurrencyManager asociado a un origen de datos.
Nota
Cuando se usa la Item[] propiedad , crea BindingContext un nuevo BindingManagerBase si aún no existe uno. Esto puede provocar confusión, ya que es posible que el objeto devuelto no administre la lista (o ninguna lista) que quiera. Para evitar devolver un valor no válido BindingManagerBase, use el Contains método para determinar si el objeto previsto BindingManagerBase ya existe.
Si usa un control de contenedor, como , GroupBoxPanelo TabControl, para contener controles enlazados a datos, puede crear un BindingContext para solo ese control de contenedor y sus controles. Después, cada parte del formulario se puede administrar por su propia BindingManagerBase. Consulte el BindingContext constructor para obtener más información sobre cómo crear varios BindingManagerBase objetos para el mismo origen de datos.
Si agrega un TextBox control a un formulario y lo enlaza a una columna de una tabla de un conjunto de datos, el control se comunica con el BindingContext de ese formulario. A BindingContextsu vez, , se comunica con el específico CurrencyManager de esa asociación de datos. Si consulta la Position
propiedad de CurrencyManager, notificaría el registro actual para el enlace de ese TextBox control. En el ejemplo de código siguiente, un TextBox control se enlaza a la FirstName
columna de una Customers
tabla del dataSet1
conjunto de datos a través del para el BindingContext formulario en el que se encuentra.
TextBox1.DataBindings.Add("Text", dataSet1, "Customers.FirstName")
textBox1.DataBindings.Add("Text", dataSet1, "Customers.FirstName");
textBox1->DataBindings->Add("Text", dataSet1, "Customers.FirstName");
Puede agregar un segundo TextBox control (TextBox2
) al formulario y enlazarlo a la LastName
columna de la Customers
tabla en el mismo conjunto de datos.
BindingContext es consciente del primer enlace (TextBox1
a Customers.FirstName
), por lo que usaría el mismo CurrencyManager, ya que ambos cuadros de texto están enlazados al mismo conjunto de datos (DataSet1
).
TextBox2.DataBindings.Add("Text", dataSet1, "Customers.LastName")
textBox2.DataBindings.Add("Text", dataSet1, "Customers.LastName");
textBox2->DataBindings->Add("Text", dataSet1, "Customers.LastName");
Si enlaza TextBox2
a un conjunto de datos diferente, BindingContext crea y administra un segundo CurrencyManager.
Es importante ser coherente con la forma de establecer las DataSource propiedades y DisplayMember ; de lo contrario, crea BindingContext varios administradores de moneda para el mismo conjunto de datos, lo que produce errores. En el ejemplo de código siguiente se muestran algunas maneras de establecer las propiedades y sus objetos asociados BindingContext . Puede establecer las propiedades mediante cualquiera de los métodos siguientes, siempre y cuando sea coherente en todo el código.
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 mayoría de las aplicaciones Windows Forms enlazan a través de .BindingSource El BindingSource componente encapsula y CurrencyManager expone la interfaz de CurrencyManager programación. Al usar para BindingSource el enlace, debe usar los miembros expuestos por BindingSource para manipular "moneda" (es decir, Position
) en lugar de pasar por .BindingContext
Constructores
BindingContext() |
Inicializa una nueva instancia de la clase BindingContext. |
Propiedades
IsReadOnly |
Obtiene un valor que indica si la colección es de solo lectura. |
Item[Object, String] |
Obtiene un objeto BindingManagerBase asociado al origen de datos y miembro de datos especificados. |
Item[Object] |
Obtiene el objeto BindingManagerBase asociado al origen de datos especificado. |
Métodos
Add(Object, BindingManagerBase) |
Agrega a la colección el objeto BindingManagerBase asociado a un origen de datos específico. |
AddCore(Object, BindingManagerBase) |
Agrega a la colección el objeto BindingManagerBase asociado a un origen de datos específico. |
Clear() |
Borra cualquier objeto BindingManagerBase de la colección. |
ClearCore() |
Borra la colección. |
Contains(Object) |
Obtiene un valor que indica si BindingContext contiene el objeto BindingManagerBase asociado al origen de datos especificado. |
Contains(Object, String) |
Obtiene un valor que indica si BindingContext contiene el objeto BindingManagerBase asociado al origen de datos y miembro de datos especificados. |
Equals(Object) |
Determina si el objeto especificado es igual que el objeto actual. (Heredado de Object) |
GetHashCode() |
Sirve como la función hash predeterminada. (Heredado de Object) |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
OnCollectionChanged(CollectionChangeEventArgs) |
Genera el evento CollectionChanged. |
Remove(Object) |
Elimina el objeto BindingManagerBase asociado al origen de datos especificado. |
RemoveCore(Object) |
Quita el objeto BindingManagerBase asociado al origen de datos especificado. |
ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |
UpdateBinding(BindingContext, Binding) |
Asocia una clase Binding a un nuevo objeto BindingContext. |
Eventos
CollectionChanged |
Siempre provoca NotImplementedException cuando se controla. |
Implementaciones de interfaz explícitas
ICollection.CopyTo(Array, Int32) |
Copia los elementos de la colección en la matriz especificada, empezando por el índice de la colección. |
ICollection.Count |
Obtiene el número total de objetos CurrencyManager de la colección administrados por BindingContext. |
ICollection.IsSynchronized |
Obtiene un valor que indica si la colección está sincronizada. |
ICollection.SyncRoot |
Obtiene un objeto que se utiliza para la sincronización (seguridad para la ejecución de subprocesos). |
IEnumerable.GetEnumerator() |
Obtiene un enumerador para la colección. |
Métodos de extensión
Cast<TResult>(IEnumerable) |
Convierte los elementos de IEnumerable en el tipo especificado. |
OfType<TResult>(IEnumerable) |
Filtra los elementos de IEnumerable en función de un tipo especificado. |
AsParallel(IEnumerable) |
Habilita la paralelización de una consulta. |
AsQueryable(IEnumerable) |
Convierte una interfaz IEnumerable en IQueryable. |