BindingContext Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Gerencia a coleção de objetos BindingManagerBase para qualquer objeto que herda da 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
- Herança
-
BindingContext
- Implementações
Exemplos
O exemplo de código a seguir cria quatro Binding objetos para associar cinco controles – um DateTimePicker e quatro TextBox controles – a várias fontes de dados. Em BindingContext seguida, o é usado para obter o BindingManagerBase para cada fonte de dados.
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
Comentários
Cada Formulário do Windows tem pelo menos um BindingContext objeto que gerencia os BindingManagerBase objetos do formulário. Como a BindingManagerBase classe é abstrata, o tipo de retorno da Item[] propriedade é um CurrencyManager ou um PropertyManager. Se a fonte de dados for um objeto que pode retornar apenas uma única propriedade (em vez de uma lista de objetos), o Type será um PropertyManager. Por exemplo, se você especificar um TextBox como a fonte de dados, um PropertyManager será retornado. Por outro lado, se a fonte de dados for um objeto que implementa IList ou IBindingList, um CurrencyManager será retornado.
Para cada fonte de dados em um Formulário do Windows, há um único CurrencyManager ou PropertyManager. Como pode haver várias fontes de dados associadas a um Formulário do Windows, o BindingContext permite que você recupere qualquer particular CurrencyManager associado a uma fonte de dados.
Observação
Ao usar a Item[] propriedade , o BindingContext criará um novo BindingManagerBase se ainda não existir. Isso pode causar alguma confusão, pois o objeto retornado pode não gerenciar a lista (ou qualquer lista) que você pretende. Para evitar o retorno de um inválido BindingManagerBase, use o Contains método para determinar se o pretendido BindingManagerBase já existe.
Se você usar um controle de contêiner, como , GroupBoxPanelou TabControl, para conter controles associados a dados, poderá criar um BindingContext apenas para esse controle de contêiner e seus controles. Em seguida, cada parte do formulário pode ser gerenciada por seu próprio BindingManagerBase. Consulte o BindingContext construtor para obter mais informações sobre como criar vários BindingManagerBase objetos para a mesma fonte de dados.
Se você adicionar um TextBox controle a um formulário e associá-lo a uma coluna de uma tabela em um conjunto de dados, o controle se comunicará com o BindingContext desse formulário. O BindingContext, por sua vez, conversa com o específico CurrencyManager dessa associação de dados. Se você consultasse a Position
propriedade do CurrencyManager, ele relataria o registro atual para a associação desse TextBox controle. No exemplo de código a seguir, um TextBox controle é associado à FirstName
coluna de uma Customers
tabela no dataSet1
conjunto de dados por meio do BindingContext para o formulário em que está.
TextBox1.DataBindings.Add("Text", dataSet1, "Customers.FirstName")
textBox1.DataBindings.Add("Text", dataSet1, "Customers.FirstName");
textBox1->DataBindings->Add("Text", dataSet1, "Customers.FirstName");
Você pode adicionar um segundo TextBox controle (TextBox2
) ao formulário e associá-lo à LastName
coluna da Customers
tabela no mesmo conjunto de dados. O BindingContext está ciente da primeira associação (TextBox1
para Customers.FirstName
), portanto, ele usaria o mesmo CurrencyManager, pois ambas as caixas de texto estão associadas ao mesmo conjunto de dados (DataSet1
).
TextBox2.DataBindings.Add("Text", dataSet1, "Customers.LastName")
textBox2.DataBindings.Add("Text", dataSet1, "Customers.LastName");
textBox2->DataBindings->Add("Text", dataSet1, "Customers.LastName");
Se você associar TextBox2
a um conjunto de dados diferente, o BindingContext criará e gerenciará um segundo CurrencyManager.
É importante ser consistente sobre como você define as DataSource propriedades e DisplayMember ; caso contrário, o BindingContext cria vários gerentes de moeda para o mesmo conjunto de dados, o que resulta em erros. O exemplo de código a seguir mostra algumas maneiras de definir as propriedades e seus objetos associados BindingContext . Você pode definir as propriedades usando qualquer um dos métodos a seguir, desde que seja consistente em todo o 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;
Observação
A maioria dos aplicativos Windows Forms associam por meio de um BindingSource. O BindingSource componente encapsula um CurrencyManager e expõe a CurrencyManager interface de programação. Ao usar um BindingSource para associação, você deve usar os membros expostos pelo BindingSource para manipular a "moeda" (ou seja, Position
) em vez de passar pelo BindingContext.
Construtores
BindingContext() |
Inicializa uma nova instância da classe BindingContext. |
Propriedades
IsReadOnly |
Obtém um valor que indica se a coleção é somente leitura. |
Item[Object, String] |
Obtém um BindingManagerBase associado à fonte de dados e ao membro de dados associados. |
Item[Object] |
Obtém a BindingManagerBase associada à fonte de dados especificada. |
Métodos
Add(Object, BindingManagerBase) |
Adiciona o BindingManagerBase associado a uma fonte de dados específica à coleção. |
AddCore(Object, BindingManagerBase) |
Adiciona o BindingManagerBase associado a uma fonte de dados específica à coleção. |
Clear() |
Limpa a coleção de todos os objetos BindingManagerBase. |
ClearCore() |
Limpa a coleção. |
Contains(Object) |
Obtém um valor que indica se o BindingContext contém o BindingManagerBase associado à fonte de dados especificada. |
Contains(Object, String) |
Obtém um valor que indica se o BindingContext contém o BindingManagerBase associado à fonte de dados e ao membro de dados especificados. |
Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
GetHashCode() |
Serve como a função de hash padrão. (Herdado de Object) |
GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
MemberwiseClone() |
Cria uma cópia superficial do Object atual. (Herdado de Object) |
OnCollectionChanged(CollectionChangeEventArgs) |
Aciona o evento CollectionChanged. |
Remove(Object) |
Exclui a BindingManagerBase associada à fonte de dados especificada. |
RemoveCore(Object) |
Remove a BindingManagerBase associada à fonte de dados especificada. |
ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |
UpdateBinding(BindingContext, Binding) |
Associa um Binding a um novo BindingContext. |
Eventos
CollectionChanged |
Sempre gera um NotImplementedException quando manipulado. |
Implantações explícitas de interface
ICollection.CopyTo(Array, Int32) |
Copia os elementos da coleção em uma matriz especificada, começando no índice da coleção. |
ICollection.Count |
Obtém o número total de objetos CurrencyManager gerenciados pelo BindingContext. |
ICollection.IsSynchronized |
Obtém um valor que indica se a coleção está sincronizada. |
ICollection.SyncRoot |
Obtém um objeto a ser usado para sincronização (acesso thread-safe). |
IEnumerable.GetEnumerator() |
Obtém um enumerador para a coleção. |
Métodos de Extensão
Cast<TResult>(IEnumerable) |
Converte os elementos de um IEnumerable para o tipo especificado. |
OfType<TResult>(IEnumerable) |
Filtra os elementos de um IEnumerable com base em um tipo especificado. |
AsParallel(IEnumerable) |
Habilita a paralelização de uma consulta. |
AsQueryable(IEnumerable) |
Converte um IEnumerable em um IQueryable. |