BindingContext Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Управляет коллекцией BindingManagerBase объектов для любого объекта, наследуемого 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
- Наследование
-
BindingContext
- Реализации
Примеры
В следующем примере кода создаются четыре Binding объекта для привязки пяти элементов управления —a DateTimePicker и четырех TextBox элементов управления — к нескольким источникам данных. Затем используется BindingContext для получения BindingManagerBase каждого источника данных.
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
Комментарии
Каждый Windows Form имеет по крайней мере один объект BindingContext, который управляет объектами BindingManagerBase для формы. BindingManagerBase Так как класс является абстрактным, возвращаемый тип Item[] свойства является либо aCurrencyManager, либо .PropertyManager Если источник данных является объектом, который может возвращать только одно свойство (вместо списка объектов), Type это объект PropertyManager. Например, если указать TextBox источник данных в качестве источника данных, PropertyManager возвращается. С другой стороны, если источник данных является объектом, реализующим IList или IBindingListвозвращаемым CurrencyManager объектом.
Для каждого источника данных в форме Windows существует один CurrencyManager или PropertyManager. Так как с формой Windows может быть несколько источников данных, BindingContext позволяет получить любой конкретный CurrencyManager, связанный с источником данных.
Note
При использовании Item[] свойства создается новыйBindingContext, BindingManagerBase если он еще не существует. Это может привести к некоторой путанице, так как возвращаемый объект может не управлять списком (или любым списком), который вы планируете. Чтобы предотвратить возвращение недопустимого BindingManagerBase, используйте Contains метод, чтобы определить, существует ли оно BindingManagerBase уже.
Если вы используете элемент управления контейнера, например GroupBoxэлемент управления , Panelили TabControl, чтобы содержать элементы управления с привязкой к данным, можно создать BindingContext только этот элемент управления контейнера и его элементы управления. Затем каждая часть формы может управляться самостоятельно BindingManagerBase. Дополнительные сведения о создании нескольких BindingContext объектов для одного источника данных см. в BindingManagerBase конструкторе.
Если добавить TextBox элемент управления в форму и привязать его к столбцу таблицы в наборе данных, элемент управления взаимодействует с BindingContext этой формой. В BindingContextсвою очередь, переговоры с конкретными CurrencyManager для этой связи данных. Если вы запросили Position свойство объекта CurrencyManager, он сообщит текущую запись для привязки этого TextBox элемента управления. В следующем примере TextBox кода элемент управления привязан к FirstName столбцу Customers таблицы в dataSet1 наборе данных через BindingContext форму, вложенную в нее.
TextBox1.DataBindings.Add("Text", dataSet1, "Customers.FirstName")
textBox1.DataBindings.Add("Text", dataSet1, "Customers.FirstName");
Вы можете добавить второй TextBox элемент управления (TextBox2) в форму и привязать его к LastName столбцу Customers таблицы в том же наборе данных. Известно BindingContext о первой привязке (TextBox1 к Customers.FirstName), поэтому она будет использовать то же CurrencyManagerсамое, так как оба текстовых поля привязаны к одному набору данных (DataSet1).
TextBox2.DataBindings.Add("Text", dataSet1, "Customers.LastName")
textBox2.DataBindings.Add("Text", dataSet1, "Customers.LastName");
При привязке TextBox2 к другому набору данных создается BindingContext и управляется секундой CurrencyManager.
Важно быть последовательным в том, как задать DataSource и DisplayMember свойства; в противном случае BindingContext создается несколько диспетчеров валют для одного набора данных, что приводит к ошибкам. В следующем примере кода показано несколько способов задания свойств и связанных BindingContext с ними объектов. Вы можете задать свойства с помощью любого из следующих методов, если вы согласованы во всем коде.
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
Большинство Windows Forms приложений привязываются через BindingSource. Компонент BindingSource инкапсулирует и CurrencyManager предоставляет CurrencyManager интерфейс программирования. При использовании BindingSource привязки следует использовать элементы, предоставляемые BindingSource для управления "валютой" (то есть Position), а не пройти через BindingContext.
Конструкторы
| Имя | Описание |
|---|---|
| BindingContext() |
Инициализирует новый экземпляр класса BindingContext. |
Свойства
| Имя | Описание |
|---|---|
| IsReadOnly |
Возвращает значение, указывающее, доступна ли коллекция только для чтения. |
| Item[Object, String] |
BindingManagerBase Возвращает объект, связанный с указанным источником данных и элементом данных. |
| Item[Object] |
BindingManagerBase Возвращает объект, связанный с указанным источником данных. |
Методы
| Имя | Описание |
|---|---|
| Add(Object, BindingManagerBase) |
BindingManagerBase Добавляет связанный с определенным источником данных в коллекцию. |
| AddCore(Object, BindingManagerBase) |
BindingManagerBase Добавляет связанный с определенным источником данных в коллекцию. |
| Clear() |
Очищает коллекцию объектов BindingManagerBase . |
| ClearCore() |
Очищает коллекцию. |
| Contains(Object, String) |
Возвращает значение, указывающее, содержит BindingContext ли BindingManagerBase он связанный с указанным источником данных и элементом данных. |
| Contains(Object) |
Возвращает значение, указывающее, содержит BindingContext ли BindingManagerBase он связанный с указанным источником данных. |
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| OnCollectionChanged(CollectionChangeEventArgs) |
Вызывает событие CollectionChanged. |
| Remove(Object) |
Удаляет связанный BindingManagerBase с указанным источником данных. |
| RemoveCore(Object) |
Удаляет связанный BindingManagerBase с указанным источником данных. |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
| UpdateBinding(BindingContext, Binding) |
Связывает объект Binding с новым BindingContext. |
События
| Имя | Описание |
|---|---|
| CollectionChanged |
Всегда вызывается NotImplementedException при обработке. |
Явные реализации интерфейса
| Имя | Описание |
|---|---|
| ICollection.CopyTo(Array, Int32) |
Копирует элементы коллекции в указанный массив, начиная с индекса коллекции. |
| ICollection.Count |
Возвращает общее количество объектов, управляемых CurrencyManager параметром BindingContext. |
| ICollection.IsSynchronized |
Возвращает значение, указывающее, синхронизирована ли коллекция. |
| ICollection.SyncRoot |
Возвращает объект, используемый для синхронизации (безопасность потока). |
| IEnumerable.GetEnumerator() |
Возвращает перечислитель для коллекции. |
Методы расширения
| Имя | Описание |
|---|---|
| AsParallel(IEnumerable) |
Включает параллелизацию запроса. |
| AsQueryable(IEnumerable) |
Преобразует IEnumerable в IQueryable. |
| Cast<TResult>(IEnumerable) |
Приведение элементов IEnumerable к указанному типу. |
| OfType<TResult>(IEnumerable) |
Фильтрует элементы IEnumerable на основе указанного типа. |