BindingContext Classe

Definição

Gere a coleção de BindingManagerBase objetos para qualquer objeto que herde da Control classe.

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 seguinte cria quatro Binding objetos para associar cinco controlos - a DateTimePicker e quatro TextBox controlos - a várias fontes de dados. O BindingContext é entã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

Observações

Cada Formulário Windows tem pelo menos um objeto BindingContext que gere os objetos BindingManagerBase para a forma. Como a BindingManagerBase classe é abstrata, o tipo de retorno da Item[] propriedade é ou a CurrencyManager ou a PropertyManager. Se a fonte de dados for um objeto que pode devolver apenas uma única propriedade (em vez de uma lista de objetos), o Type é um PropertyManager. Por exemplo, se especificar a TextBox como fonte de dados, a PropertyManager é devolvido. Por outro lado, se a fonte de dados for um objeto que implementa IList ou IBindingList, a CurrencyManager é devolvido.

Para cada fonte de dados num formulário Windows, existe um único CurrencyManager ou PropertyManager. Como podem existir múltiplas fontes de dados associadas a um Formulário Windows, o BindingContext permite-lhe recuperar qualquer CurrencyManager específico associado a uma fonte de dados.

Note

Ao usar a Item[] propriedade, cria BindingContext uma nova BindingManagerBase , caso ainda não exista. Isto pode causar alguma confusão, pois o objeto devolvido pode não gerir a lista (ou qualquer lista) que pretendes. Para evitar devolver um inválido BindingManagerBase, use o Contains método para determinar se o pretendido BindingManagerBase já existe.

Se usar um controlo de contentor, como um GroupBox, Panel, ou TabControl, para conter controlos ligados a dados, pode criar um BindingContext apenas para esse controlo de contentor e os seus controlos. Assim, cada parte da sua forma pode ser gerida pelo seu próprio BindingManagerBase. Consulte o BindingContext construtor para mais informações sobre como criar múltiplos BindingManagerBase objetos para a mesma fonte de dados.

Se adicionares um TextBox controlo a um formulário e o ligares a uma coluna de uma tabela num conjunto de dados, o controlo comunica com o BindingContext desse formulário. O BindingContext, por sua vez, fala com o específico CurrencyManager dessa associação de dados. Se consultares a Position propriedade do CurrencyManager, ele reportaria o registo atual para a ligação desse TextBox controlo. No exemplo de código seguinte, um TextBox controlo está ligado à FirstName coluna de uma Customers tabela no dataSet1 conjunto de dados através do BindingContext para a forma em que se encontra.

TextBox1.DataBindings.Add("Text", dataSet1, "Customers.FirstName")
textBox1.DataBindings.Add("Text", dataSet1, "Customers.FirstName");

Pode adicionar um segundo TextBox controlo (TextBox2) ao formulário e associá-lo à LastName coluna da Customers tabela no mesmo conjunto de dados. O BindingContext está ciente da primeira ligação (TextBox1 a Customers.FirstName), pelo que usaria a mesma CurrencyManager, pois ambas as caixas de texto estão ligadas ao mesmo conjunto de dados (DataSet1).

TextBox2.DataBindings.Add("Text", dataSet1, "Customers.LastName")
textBox2.DataBindings.Add("Text", dataSet1, "Customers.LastName");

Se ligares TextBox2 a um conjunto de dados diferente, o BindingContext cria e gere um segundo CurrencyManager.

É importante ser consistente na forma como define as DataSource propriedades e; DisplayMember caso contrário, cria BindingContext múltiplos gestores de moeda para o mesmo conjunto de dados, o que resulta em erros. O exemplo de código seguinte mostra algumas formas de definir as propriedades e os seus objetos associados BindingContext . Pode definir as propriedades usando qualquer um dos métodos seguintes, desde que seja consistente em todo o seu 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.Customers
ComboBox1.DisplayMember = "FirstName"
Me.BindingContext(dataSet1.Customers).Position = 1
comboBox1.DataSource = DataSet1.Customers;
comboBox1.DisplayMember = "FirstName";
this.BindingContext[dataSet1.Customers].Position = 1;

Note

A maioria das aplicações Windows Forms vincula através de um BindingSource. O BindingSource componente encapsula a CurrencyManager e expõe a CurrencyManager interface de programação. Ao usar um BindingSource para vinculação, deve usar os membros expostos por o BindingSource para manipular a "moeda" (isto é, Position) em vez de passar pelo BindingContext.

Construtores

Name Description
BindingContext()

Inicializa uma nova instância da BindingContext classe.

Propriedades

Name Description
IsReadOnly

Recebe um valor que indica se a coleção é apenas de leitura.

Item[Object, String]

Obtém um BindingManagerBase que está associado à fonte de dados e ao membro de dados especificados.

Item[Object]

Obtém o BindingManagerBase que está associado à fonte de dados especificada.

Métodos

Name Description
Add(Object, BindingManagerBase)

Adiciona a BindingManagerBase fonte de dados associada a uma fonte de dados específica à coleção.

AddCore(Object, BindingManagerBase)

Adiciona a BindingManagerBase fonte de dados associada a uma fonte de dados específica à coleção.

Clear()

Limpa a coleção de quaisquer BindingManagerBase objetos.

ClearCore()

Limpa a coleção.

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.

Contains(Object)

Obtém um valor que indica se o BindingContext contém o BindingManagerBase associado à fonte de dados especificada.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
OnCollectionChanged(CollectionChangeEventArgs)

Eleva o CollectionChanged evento.

Remove(Object)

Elimina a BindingManagerBase fonte de dados associada à especificada.

RemoveCore(Object)

Remove o BindingManagerBase valor associado à fonte de dados especificada.

ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)
UpdateBinding(BindingContext, Binding)

Associa um Binding a um novo BindingContext.

evento

Name Description
CollectionChanged

Sempre levanta a NotImplementedException quando é manuseado.

Implementações de Interface Explícita

Name Description
ICollection.CopyTo(Array, Int32)

Copia os elementos da coleção para um array especificado, começando no índice da coleção.

ICollection.Count

Obtém o número total de CurrencyManager objetos geridos pelo BindingContext.

ICollection.IsSynchronized

Recebe um valor que indica se a coleção está sincronizada.

ICollection.SyncRoot

Obtém um objeto para usar na sincronização (segurança de thread).

IEnumerable.GetEnumerator()

Recebe um enumerador para a coleção.

Métodos da Extensão

Name Description
AsParallel(IEnumerable)

Permite a paralelização de uma consulta.

AsQueryable(IEnumerable)

Converte um IEnumerable para um IQueryable.

Cast<TResult>(IEnumerable)

Conjura os elementos de an IEnumerable para o tipo especificado.

OfType<TResult>(IEnumerable)

Filtra os elementos de um IEnumerable com base num tipo especificado.

Aplica-se a

Ver também