Архитектура компонента 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 к различным источникам данных, сохраняя при этом текущие привязки элементов управления.
Изменять элементы в источнике данных и уведомлять связанные элементы управления. Дополнительные сведения см. в разделе Практическое руководство. Отражение в элементе управления данных, которые обновились в источнике, с использованием компонента BindingSource в Windows Forms.
Выполнять привязку к Type вместо объекта в памяти. Дополнительные сведения см. в разделе Практическое руководство. Связывание элемента управления с типом в Windows Forms. После этого можно осуществить привязку к объекту во время выполнения.
Оперативное управление
Компонент 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
Другие ресурсы
Элемент управления BindingNavigator (Windows Forms)
Связывание элементов управления Windows Forms с данными
Элементы управления для использования в формах Windows Forms