Интерфейсы, относящиеся к привязке данных
С помощью ADO.NET можно создать различные структуры данных в соответствии с требованиями привязки приложения и данных, с которыми приходится работать. Можно создать собственные классы, которые предоставляют или используют данные в Windows Forms. Такие объекты могут предоставлять функциональные возможности и обеспечивать сложность различного уровня, такие как базовая привязка данных, поддержка на этапе разработки, проверка ошибок, уведомление об изменениях или даже поддержка структурированного отката изменений, внесенных в сами данные.
Потребители интерфейсов привязки данных
Ниже описаны две группы объектов интерфейса. В первую группу входят интерфейсы, реализованные на основе источников данных авторами источников данных. Такие интерфейсы предназначены для использования потребителями источников данных, которыми в большинстве случаев являются элементы управления или компоненты Windows Forms. Ко второй группе относятся интерфейсы, используемые авторами компонентов. Авторы компонентов используют эти интерфейсы при создании компонента, поддерживающего привязку данных, которую должен применять модуль привязки данных Windows Forms. Данные интерфейсы можно реализовать внутри классов, связанных с вашей формой, чтобы обеспечить привязку данных. Каждый вариант представляет класс, реализующий интерфейс, позволяющий взаимодействовать с данными. Visual Studio быстрой разработки (RAD) в средствах уже воспользоваться преимуществами этой функции.
Интерфейсы для реализации авторами источников данных
Следующие интерфейсы предназначены для использования элементами управления Windows Forms.
IList интерфейс
Класс, реализующий IList интерфейс может быть Array, ArrayList, или CollectionBase. Они представляют собой индексированные списки элементов типа Object. Эти списки должны содержать однородные типы, так как первый элемент индекса определяет тип. IList будут доступны для привязки только во время выполнения.
Note
Если вы хотите создать список бизнес-объектов для привязки с Windows Forms, следует рассмотреть возможность использования BindingList<T>. BindingList<T> Представляет собой расширяемый класс, реализующий основные интерфейсы, необходимые для двусторонней привязки данных Windows Forms.
IBindingList интерфейс
Класс, реализующий IBindingList интерфейс обеспечивает более высокого уровня возможностей привязки данных. Благодаря данной реализации у вас есть основные возможности сортировки и уведомлений об изменении как при изменении элементов списка (например, третий элемент в списке заказчиков имеет изменения в поле адреса), так и при изменении самого списка (например, увеличение или уменьшение числа элементов в списке). Уведомление об изменении важно, если вы планируете использовать несколько элементов управления, привязанных к одним и тем же данным, и необходимо, чтобы изменения данных, сделанные в одном из элементов управления, распространялись в другие привязанные элементы управления.
Note
Уведомление об изменениях включается для IBindingList интерфейс, с помощью SupportsChangeNotification свойство которой, когда
true
, вызывает ListChanged событие, указывающее, изменен список или элемент в списке изменен.Тип изменения описывается ListChangedType свойство ListChangedEventArgs параметр. Следовательно, при любом обновлении модели данных все зависимые представления, например другие элементы управления, привязанные к тому же источнику данных, также будут обновлены. Тем не менее, будет уведомлять список о изменении, чтобы список объектов, содержащихся в списке ListChanged событий.
Note
BindingList<T> Предоставляет универсальную реализацию IBindingList интерфейс.
IBindingListView интерфейс
Класс, реализующий IBindingListView интерфейс предоставляет все функциональные возможности реализации IBindingList, а также как фильтрации и дополнительные возможности сортировки. Такая реализация обеспечивает фильтрацию на основе строк и сортировку по нескольким столбцам с помощью пары "дескриптор свойства-направление".
IEditableObject интерфейс
Класс, реализующий IEditableObject интерфейс обеспечивает связь объекта с целью управления, когда изменения в данном объекте становятся постоянными. Данная реализация предоставляет BeginEdit, EndEdit, и CancelEdit методы, позволяющие выполнять откат изменений, внесенных в объект. Ниже приводится краткое объяснение работы методов BeginEdit, EndEdit, и CancelEdit методы и как они работают в сочетании друг с другом для обеспечения отката изменений, внесенных в данные:
BeginEdit Метод сигнализирует о начале изменения объекта. Объект, реализующий этот интерфейс нужно будет сохранять все обновления после BeginEdit вызов метода таким образом, что можно было отменить Если CancelEdit вызывается метод. В Windows Forms привязки данных, можно вызвать BeginEdit несколько раз в пределах одной транзакции изменения (например, BeginEdit, BeginEdit, EndEdit). Реализации IEditableObject следует следить, следует ли BeginEdit уже был вызван и игнорировать последующие вызовы BeginEdit. Поскольку этот метод может быть вызван несколько раз, очень важно, что последующие вызовы были неразрушающими; то есть последующие BeginEdit вызовы не удается уничтожить обновления были внесены или изменить данные, сохраненные на первом BeginEdit вызова.
EndEdit Метод помещает изменения с момента BeginEdit был вызван в базовый объект, если объект находится в режиме редактирования.
CancelEdit Метод отменяет все изменения, внесенные в объект.
Дополнительные сведения о том, как BeginEdit, EndEdit, и CancelEdit методы работы, см. в разделе сохранить данные в базе данных.
Такой транзакционный характер функциональных возможностей данных используется DataGridView элемента управления.
ICancelAddNew интерфейс
Класс, реализующий ICancelAddNew обычно реализует интерфейс IBindingList интерфейса и позволяет выполнять откат добавлений, сделанных в источнике данных с помощью AddNew метод. Если источник данных реализует IBindingList интерфейс, вы также должны реализовать ICancelAddNew интерфейс.
IDataErrorInfo интерфейс
Класс, реализующий IDataErrorInfo интерфейс позволяет объектам предоставлять пользовательские сведения об ошибках в привязанные элементы управления:
IEnumerable интерфейс
Класс, реализующий IEnumerable интерфейс, обычно используется в ASP.NET. Поддержка Windows Forms для этого интерфейса можно получить только через BindingSource компонента.
Note
BindingSource Компонент копирует все IEnumerable элементы в отдельном списке исключительно для привязки.
ITypedList интерфейс
Класс коллекции, реализующий ITypedList интерфейс предоставляет возможность управлять порядком и набор свойств, доступных привязанного элемента управления.
Note
При реализации GetItemProperties метод и PropertyDescriptor массива не равно null, последней записи в массиве будет дескриптором свойства, описывающим свойство списка, который является другим списком элементов.
ICustomTypeDescriptor интерфейс
Класс, реализующий ICustomTypeDescriptor интерфейс предоставляет динамические сведения о себе. Этот интерфейс аналогичен ITypedList , но используется для объектов, а не списки. Этот интерфейс используется DataRowView для проецирования схемы основных строк. Простая реализация ICustomTypeDescriptor обеспечивается CustomTypeDescriptor класса.
Note
Для поддержки привязки во время разработки, чтобы типы, реализующие ICustomTypeDescriptor, тип должен также реализовывать IComponent и существовать в качестве экземпляра формы.
IListSource интерфейс
Класс, реализующий IListSource интерфейс позволяет привязку на основе списка не из списка объектов. GetList Метод IListSource используется для возврата привязываемого списка из объекта, который не является производным от IList. IListSource используется DataSet класса.
IRaiseItemChangedEvents интерфейс
Класс, реализующий IRaiseItemChangedEvents интерфейс представляет собой привязываемый список, который также реализует IBindingList интерфейс. Этот интерфейс используется для указания того, если ваш тип вызывает ListChanged события типа ItemChanged через его RaisesItemChangedEvents свойство.
Note
Следует реализовать IRaiseItemChangedEvents Если источник данных предоставляет свойство описанное ранее преобразование списка и взаимодействует с BindingSource компонента. В противном случае BindingSource также будет выполнять преобразование свойства в список событий приводит к снижению производительности.
ISupportInitialize интерфейс
Компонент, реализующий ISupportInitialize интерфейс, использует возможности пакетной оптимизации для задания свойств и инициализации взаимозависимых свойств. ISupportInitialize Содержит два метода:
ISupportInitializeNotification интерфейс
Компонент, реализующий ISupportInitializeNotification также интерфейс реализует ISupportInitialize интерфейс. Этот интерфейс позволяет уведомлять другие ISupportInitialize компоненты завершении инициализации. ISupportInitializeNotification Интерфейс содержит два члена:
IsInitialized Возвращает
boolean
значение, указывающее, инициализирован ли компонент.Initialized Происходит при EndInit вызывается.
INotifyPropertyChanged интерфейс
Класс, реализующий этот интерфейс, представляет собой тип, который вызывает событие при изменении любого значения его свойств. Этот интерфейс предназначен для замены шаблона, в рамках которого имеется отдельное событие изменения для каждого свойства элемента управления. При использовании в BindingList<T>, следует реализовать бизнес-объект INotifyPropertyChanged интерфейс, а BindingList`1 будет преобразовывать PropertyChanged событий ListChanged события типа ItemChanged.
Note
Для изменения уведомление создавалось в привязке между связанным клиентом и данных вашего привязанного источника данных типа источника должен либо реализовывать INotifyPropertyChanged интерфейс (предпочтительно), или можно задать propertyName
Changed
события для привязанного типа, но не следует использовать оба.
Интерфейсы для реализации авторами компонентов
Перечисленные ниже интерфейсы предназначены для использования модулем привязки данных в Windows Forms.
IBindableComponent интерфейс
Класс, реализующий этот интерфейс, является компонентом без элемента управления, который поддерживает привязку данных. Этот класс возвращает привязки данных и контекст привязки компонента через DataBindings и BindingContext свойства этого интерфейса.
Note
Если компонент наследуется от Control, необходимо реализовать IBindableComponent интерфейс.
ICurrencyManagerProvider интерфейс
Класс, реализующий ICurrencyManagerProvider интерфейс — это компонент, который предоставляет собственный CurrencyManager для управления привязками, связанными с данным конкретным компонентом. Доступ к пользовательскому CurrencyManager обеспечивается CurrencyManager свойство.
Note
Класс, наследуемый от Control управляет привязками автоматически посредством его BindingContext свойство, поэтому случаев, в которых необходимо реализовать ICurrencyManagerProvider довольно редки.