Поделиться через


Архитектура компонента BindingSource

С помощью компонента BindingSource можно универсально привязать все элементы управления Windows Forms к источникам данных.

Компонент BindingSource упрощает процесс управления привязкой к источнику данных и предоставляет следующие преимущества по сравнению с традиционной привязкой данных:

  • Включает привязку на этапе разработки к бизнес-объектам.

  • Инкапсулирует функциональность CurrencyManager и предоставляет события CurrencyManager на этапе проектирования.

  • Упрощает создание списка, поддерживающего интерфейс IBindingList, предоставляя уведомление об изменении списка для источников данных, которые не поддерживают уведомление об изменении списка в собственном коде.

  • Предоставляет точку расширяемости для метода IBindingList.AddNew.

  • Предоставляет уровень косвенного взаимодействия между источником данных и элементом управления. Эта опосредованность важна, если источник данных может измениться во время выполнения.

  • Взаимодействует с другими элементами управления Windows Forms, связанными с данными, в частности BindingNavigator и элементами управления DataGridView.

По этим причинам компонент BindingSource является предпочтительным способом привязки элементов управления Windows Forms к источникам данных.

Функции BindingSource

Компонент BindingSource предоставляет несколько функций для привязки элементов управления данными. С помощью этих функций вы можете реализовать большинство сценариев привязки данных практически без написания кода на вашей части.

Компонент BindingSource выполняет это путем предоставления согласованного интерфейса для доступа к различным типам источников данных. Это означает, что для привязки к любому типу используется та же процедура. Например, можно подключить свойство DataSource к DataSet или бизнес-объекту, а в обоих случаях использовать один и тот же набор свойств, методов и событий для управления источником данных.

Согласованный интерфейс, предоставляемый компонентом BindingSource, значительно упрощает процесс привязки данных к элементам управления. Для типов источников данных, которые предоставляют уведомление об изменении, компонент BindingSource автоматически передает изменения между элементом управления и источником данных. Для типов источников данных, которые не предоставляют уведомления об изменении, предоставляются события, позволяющие создавать уведомления об изменениях. В следующем списке показаны функции, поддерживаемые компонентом BindingSource:

  • Косвенность.

  • Управление валютами.

  • Источник данных в виде списка.

  • BindingSource как IBindingList.

  • Создание пользовательского элемента.

  • Создание транзакционного элемента.

  • поддержка IEnumerable.

  • Поддержка на этапе проектирования.

  • Статические ListBindingHelper методы.

  • Сортировка и фильтрация с помощью интерфейса IBindingListView.

  • Интеграция с BindingNavigator.

Косвенность

Компонент BindingSource предоставляет уровень косвенного взаимодействия между элементом управления и источником данных. Вместо привязки элемента управления непосредственно к источнику данных вы привязываете элемент управления к BindingSourceи присоединяете источник данных к свойству DataSource компонента BindingSource.

С помощью этого уровня косвенности можно изменить источник данных без сброса привязки управления. Это дает следующие возможности:

Управление валютами

Компонент BindingSource реализует интерфейс ICurrencyManagerProvider для обработки управления валютами. С помощью интерфейса ICurrencyManagerProvider вы также можете получить доступ к диспетчеру валют для BindingSource, помимо диспетчера валют для другого BindingSource, привязанного к той же DataMember.

Компонент BindingSource инкапсулирует CurrencyManager функциональные возможности и предоставляет наиболее распространенные CurrencyManager свойства и события. В следующей таблице описываются некоторые члены, связанные с управлением валютами.

свойство CurrencyManager
Возвращает диспетчер валют, связанный с BindingSource.

метод GetRelatedCurrencyManager
Если существует еще один BindingSource привязан к указанному элементу данных, получает его диспетчер валют.

свойство Current
Извлекает текущий элемент из источника данных.

свойство Position
Возвращает или задает текущую позицию в базовом списке.

метод EndEdit
Применяет ожидающие изменения к базовому источнику данных.

метод CancelEdit
Отменяет текущую операцию редактирования.

Источник данных в виде списка

Компонент BindingSource реализует интерфейсы IBindingListView и ITypedList. С помощью этой реализации можно использовать сам компонент BindingSource в качестве источника данных без внешнего хранилища.

Когда компонент BindingSource подключен к источнику данных, он предоставляет источник данных в виде списка.

Свойство DataSource можно задать для нескольких источников данных. К ним относятся типы, объекты и списки типов. Результирующий источник данных будет предоставлен в виде списка. В следующей таблице показаны некоторые распространенные источники данных и итоговая оценка списка.

Свойство DataSource Список результатов
Ссылка на null (Nothing в Visual Basic) Пустой набор объектов IBindingList. Добавление элемента приводит к изменению типа списка на тип того элемента, который добавлен.
Ссылка на null (Nothing в Visual Basic) с установленным значением DataMember Не поддерживается; вызывает ArgumentException.
Нелистовой тип или объект типа "T" Пустой IBindingList типа "T".
Экземпляр массива IBindingList, содержащий элементы массива.
объект IEnumerable IBindingList, содержащий элементы IEnumerable
Экземпляр списка, содержащий тип "T" Экземпляр IBindingList, содержащий тип T.

Кроме того, DataSource можно задать для других типов списков, таких как IListSource и ITypedList, а BindingSource будет обрабатывать их соответствующим образом. В этом случае тип, содержащийся в списке, должен иметь конструктор без параметров.

BindingSource как IBindingList

Компонент BindingSource предоставляет элементы для доступа к базовым данным и управления ими как IBindingList. В следующей таблице описаны некоторые из этих элементов.

Член Описание
свойство List Получает список, который является результатом оценки свойств DataSource или DataMember.
метод AddNew Добавляет новый элемент в базовый список. Применяется к источникам данных, реализующим интерфейс IBindingList и разрешающим добавление элементов (то есть свойство AllowNew имеет значение true).

Создание настраиваемых элементов

Вы можете обработать событие AddingNew, чтобы предоставить собственную логику создания элементов. Событие AddingNew происходит перед добавлением нового объекта в BindingSource. Это событие возникает после вызова метода AddNew, но перед добавлением нового элемента в базовый список. Обрабатывая это событие, можно задать поведение создания пользовательских элементов без наследования от класса BindingSource. Дополнительные сведения см. в разделе Как настроить добавление элементов с помощьюИсточника Привязки Windows Forms.

Создание транзакционных элементов

Компонент BindingSource реализует интерфейс ICancelAddNew, который позволяет создавать транзакционные элементы. После предварительного создания нового элемента с помощью вызова AddNewдобавление может быть зафиксировано или откатировано следующим образом:

  • Метод EndNew явно фиксирует ожидаемое добавление.

  • Выполнение другой операции сбора, например вставки, удаления или перемещения, неявно фиксирует ожидающее добавление.

  • Метод CancelNew откатит ожидаемое добавление, если метод еще не подтвержден.

Поддержка IEnumerable

Компонент BindingSource позволяет элементам управления привязываться к IEnumerable источникам данных. С помощью этого компонента можно привязать к источнику данных, например к System.Data.SqlClient.SqlDataReader.

Когда источник данных IEnumerable назначается компоненту BindingSource, BindingSource создает IBindingList и добавляет в список содержимое источника данных IEnumerable.

поддержка Design-Time

Некоторые типы объектов нельзя создавать во время разработки, например объекты, созданные из класса фабрики, или объекты, возвращаемые веб-службой. Иногда может потребоваться привязать элементы управления к этим типам во время разработки, даже если в памяти нет объекта, к которому могут привязаться элементы управления. Например, вам может понадобиться пометить заголовки столбцов элемента управления DataGridView именами общедоступных свойств вашего пользовательского типа.

Для поддержки этого сценария компонент BindingSource поддерживает привязку к Type. Когда вы назначаете Type свойству DataSource, компонент BindingSource создает пустую BindingList<T> из элементов Type. Все элементы управления, которые впоследствии привязываются к компоненту BindingSource, будут оповещены о присутствии свойств или схемы вашего типа во время проектирования или выполнения. Дополнительные сведения см. в статье Практическое руководство. Привязка элемента управления Windows Forms к типу.

Статические методы ListBindingHelper

Типы System.Windows.Forms.BindingContext, System.Windows.Forms.CurrencyManagerи BindingSource используют общую логику для создания списка из пары DataSource/DataMember. Кроме того, эта общая логика публично предоставляется для использования авторами элементов управления и другими третьими сторонами в следующих static методах:

Сортировка и фильтрация с помощью интерфейса IBindingListView

Компонент BindingSource реализует интерфейс IBindingListView, который расширяет интерфейс IBindingList. IBindingList предлагает сортировку по одному столбцу, а IBindingListView предлагает расширенную сортировку и фильтрацию. С помощью IBindingListViewможно сортировать и фильтровать элементы в источнике данных, если источник данных также реализует один из этих интерфейсов. Компонент BindingSource не предоставляет эталонную реализацию этих элементов. Вместо этого вызовы перенаправляются в базовый список.

В следующей таблице описываются свойства, используемые для сортировки и фильтрации.

Член Описание
свойство Filter Если источник данных является IBindingListView, получает или задает выражение, используемое для фильтрации строк.
свойство Sort Если источник данных — IBindingList, получает или задает имя столбца, используемое для сортировки, и информацию о порядке сортировки.

-или-

Если источник данных является IBindingListView и поддерживает расширенную сортировку, получает информацию о нескольких именах столбцов, используемых для сортировки, и порядке сортировки.

Интеграция с BindingNavigator

Компонент BindingSource можно использовать для привязки любого элемента управления Windows Forms к источнику данных, но элемент управления BindingNavigator предназначен специально для работы с компонентом BindingSource. Элемент управления BindingNavigator предоставляет пользовательский интерфейс для управления текущим элементом компонента BindingSource. По умолчанию элемент управления BindingNavigator предоставляет кнопки, соответствующие методам навигации в компоненте BindingSource. Дополнительные сведения см. в разделе Как: Навигировать данными с помощью элемента управления Windows Forms BindingNavigator.

См. также