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


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

Обновлен: Ноябрь 2007

Компонент 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

Результаты в списке

Пустая ссылка (значение Nothing в Visual Basic)

Пустой IBindingList объектов. Добавление элемента присваивает списку тип этого элемента.

Пустая ссылка (значение Nothing в Visual Basic) с набором DataMember

Не поддерживается; вызывает ArgumentException.

Тип, не являющийся списком, или объект типа "Т"

Пустой IBindingList типа "Т".

Экземпляр массива

Список IBindingList, содержащий элементы массива.

Экземпляр IEnumerable

Список IBindingList, содержащий элементы IEnumerable

Экземпляр списка, содержащий тип "Т"

Экземпляр IBindingList, содержащий тип "Т".

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

BindingSource в виде IBindingList

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

Элемент

Описание

Свойство List

Возвращает список с результатами вычислений значений свойств DataSource или DataMember.

Метод AddNew

Добавляет новый элемент в базовый список. Применяется к источникам данных, которые реализуют интерфейс IBindingList и позволяют добавлять элементы (т. е. источникам, для которых свойству AllowNew задано значение true).

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

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

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

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

  • Метод EndNew явным образом подтверждает отложенное добавление.

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

  • Метод CancelNew отменяет отложенное добавление, если этот метод не был предварительно подтвержден.

Поддержка интерфейса IEnumerable

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

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

Поддержка на этапе разработки

Некоторые типы объектов невозможно создать на этапе разработки. Это, например, объекты, созданные из класса фабрики, или объекты, возвращенные веб-службой. Иногда требуется привязывать элементы управления к таким типам объектов на стадии разработки несмотря на отсутствие в памяти каких-либо объектов, к которым можно выполнить привязку. Например, может потребоваться пометить заголовки столбцов элемента управления 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. Дополнительные сведения см. в разделе Практическое руководство. Переход между данными с помощью элемента управления BindingNavigator в Windows Forms.

См. также

Задачи

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

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

Ссылки

Общие сведения о компоненте BindingSource

BindingSource

BindingNavigator

Другие ресурсы

Элемент управления BindingNavigator (Windows Forms)

Связывание элементов управления Windows Forms с данными

Элементы управления для использования в формах Windows Forms