5. Общее представление об интерфейсах привязки данных

Верификация организована вокруг элементов управления и событий

привязанные к данным элементы управления

Как и большинство аспектов программирования Windows Forms, верификация организована вокруг элементов управления и событий. Привязанные к данным элементы управления возбуждают события, давая возможность писать специальный код для выполнения верификации. Помимо событий, возбуждаемых элементами управления, в состав Framework входит элемент управления ErrorProvider, который обеспечивает стандартизованный способ уведомления пользователя о любых проблемах верификации, простой для понимания с точки зрения как конечного пользователя, так и программиста, организующего верификацию. Сложные элементы управления, вроде DataGridView, Имеют встроенную поддержку для отображения ошибок верификации по месту, чтобы уведомлять пользователя о проблеме прямо там, где она возникает. Имеется встроенная поддержка на уровне форм для каскадирования верификационных проверок вверх и вниз по иерархии элементов управления. Этим устраняется необходимость писать массу кода проверок, гарантирующих, что каждый элемент управления на форме будет удовлетворен теми данными, которые он содержит. Все это, сведенное воедино, дает вам различные способы и возможности гарантировать, что в ваше приложение попадут только хорошие данные, и что когда произойдет ошибка, вы сможете дать пользователю ясные указания, чтобы помочь ему справиться с проблемой. Именно событие Validating Вы чаще всего будете обрабатывать в сценариях привязки данных. Когда элемент управления решает, что ввод завершен, обычно потому, что фокус ввода переходит к другому элементу управления на форме, он должен запустить событие Validating. Событие имеет тип CancelEventHandler, Который принимает аргумент типа CancelEvent — Args. Класс CancelEventArgs Имеет единственное булево свойство с именем Cancel, Которое вы можете установить, чтобы сигнализировать, что запущенное событие не должно завершиться. Устанавливая Cancel Равным True, Вы возвращаете элементу управления сигнал о том, что в коде, обрабатывающем событие, верификация потерпела неудачу.

Работа с классом XmlDataDocument

он является производным от b

Класс XmlDataDocument Служит мостом между мирами реляционных и иерархических данных. Он является производным от XmlDocument, Так что он «является» XmlDocument В чистейшем смысле объектно-ориентированного наследования и, таким образом, экспонирует все средства класса XmlDocument Для хранения и манипулирования данными XML. Он инкапсулирует также в качестве свойства DataSet, Который позволяет вам обращаться ко всему или к части содержимого XmlDataDocument Как к реляционным данным.

Есть два типичных способа использования XmlDataDocument. Первый — это загрузить XML в документ, а затем обращаться к его свойству DataSet Для привязки данных, итерации по содержимому в объектной модели набора данных или синхронизации содержимого с базой данных. Второй способ — взять DataSet, Уже содержащий данные, и конструировать из него XmlDataDocument И использовать для программирования операций с данными средства XML.

Чтобы загрузить данные XML в XmlDataDocument И иметь к ним доступ через его свойство DataSet, Вам нужно, прежде чем вы будете загружать XML, установить в XmlDataDocument Схему набора данных. Класс XmlDataDocument Не может вывести схему набора данных при чтении XML из файла или строки, как это делает метод DataSet.ReadXml. Однако если вы сначала предоставите его инкапсулированному набору данных схему, а затем прочитаете XML, он сможет ассоциировать читаемые элементы XML и их атрибуты со схемой набора данных, после чего к этим данным можно будет обращаться через свойство DataSet Объекта XmlDataDocument. Вы можете видеть, что эти данные можно рассматривать как содержащие два рода данных, Customer и Address, и что между ними существует родительско-дочернее отношение. В наборе данных это было бы представлено двумя таблицами данных с отношением данных между ними. Чтобы загрузить эти данные в XmlDataDocument И обращаться к ним через свойство DataSet, Вам нужно сначала указать объекту XmlDataDocument, Какую схему набора данных использовать при чтении XML.

Определение и использование привязанных коллекций рабочих объектов

обычно имеются коллекции объектов определенного

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

Чтобы быть хорошим программистом объектно-ориентированных систем, необходимо хорошее знание структур данных. Если вы не очень хорошо представляете себе различия и центральные концепции списков, множеств, стеков, очередей и смешанных таблиц, я рекомендую вам прочитать какую-нибудь хорошую книгу по структурам данных. Как вы видели в других главах, главной структурой коллекции данных, с которой вы будете иметь дело в привязке данных, является список. Некоторые из других типов коллекций имеют иную семантику, как, например, пары ключ-значение в смешанных таблицах или порядок входа и выхода в стеках и очередях. В конечном счете все они являются просто множествами объектов данных в памяти, так или иначе упорядоченных, к которым можно обращаться разнообразными способами. Большинство других типов коллекций имеют способы обращаться к их содержимому Также как к коллекции.

Сам тип DataSet Является просто причудливым классом коллекции. Это класс, который содержит коллекцию таблиц данных . Таблицы содержат коллекции строк И столбцов . Эквивалентом рабочего объекта в наборе данных является экземпляр строки, и эта строка может быть нетипизированной Или типизированной, как, например, CustomersRow В типизированном наборе данных, содержащем данные о заказчиках. Поэтому в этом плане строка типизированного набора данных является в действительности просто автоматически генерированным рабочим объектом, не содержащим никакой логики, ассоциированной с его данными. Однако поскольку типизированные строки данных и таблицы определяются в генерированном коде. NET 2.0 как неполные классы, к ним можно было бы добавить еще и рабочую логику.