Partilhar via


BindingContext Classe

Definição

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.

Aplica-se a

Confira também