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


Архитектура компонента 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объекту и подключаете источник данных к BindingSource свойству компонента DataSource .

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

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

Компонент 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 объект. Добавление элемента задает список в тип добавленного элемента.
Ссылка null (Nothingв Visual Basic) с набором DataMember Не поддерживается; ArgumentExceptionвызывает .
Тип списка или объект типа "T" Пустой IBindingList тип "T".
Экземпляр массива Содержащий IBindingList элементы массива.
IEnumerable Экземпляр IEnumerable Содержащий IBindingList элементы
Вывод списка экземпляров, содержащих тип "T" Экземпляр IBindingList , содержащий тип T.

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

BindingSource в качестве IBindingList

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

Элемент Description
Свойство 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 источника данных в список.

Поддержка времени разработки

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

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

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

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

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

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

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

Элемент Description
Свойство Filter Если источником данных является IBindingListView, то возвращает или задает выражение, используемое для фильтрации просматриваемых строк.
Свойство Sort Если источником данных является IBindingList, то возвращает или задает имя столбца, используемого для сортировки, и порядок сортировки.

или

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

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

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

См. также