1. Построение приложений с привязанными данными в Windows Forms

Элементы управления DateTimePicker

он выглядит подобно элементу управления

Элемент управления DateTimePicker Довольно сложен и допускает отображение и редактирование форматированной информации о дате и времени. Он выглядит подобно элементу управления ComboBox, Внутри которого в текстовой форме отображается информация даты и времени. Форматирование этого отображения может быть задано на основе нескольких предопределенных форматов или путем спецификации специальной строки форматирования. Если выбрать стрелку выпадающего списка, появляется элемент управления календаря, предоставляющий пользователю интуитивно ясный и гибкий механизм выбора. Событием по умолчанию является событие ValueChanged, Которое можно обрабатывать, чтобы получать уведомления об изменении даты и времени или о том, что в элементе управления произошел выбор даты. Вы используете элемент управления ListBox Для представления пользователям списка элементов, обычно позволяя им выбрать один или несколько элементов списка в качестве одного из аспектов задачи ввода данных. Поле списка обычно используется, когда вы хотите, чтобы пользователь видел одновременно несколько элементов, доступных для выбора, часто с возможностью выбора нескольких элементов сразу. Поля списков хранят элементы, представляемые в списке, в виде набора объектных ссылок, сохраняемых в коллекции типа ListBox.ObjectCol — Lection, Вложенного типа в классе ListBox. Когда поле списка отображает хранящееся в нем элементы, он вызывает метод ToString Каждой объектной ссылки, и результат этих вызовов даст то, что будет представлено пользователю. Вы можете поместить в эту коллекцию объект любого рода, так что вы можете держать все данные, ассоциированные с отображаемым значением, в одном месте, и только строковое представление данного объекта будет передаваться в состав элементов списка.

Допустим, например, для какой-то задачи вы хотите представлять пользователям для выбора список заказчиков. Однако когда форма будет обрабатываться, вам потребуется ID заказчика и, возможно, другая информация, чтобы произвести обработку в соответствии с выбором. Для поддержки такого сценария вы могли бы создать класс Customer, Который переопределяет метод ToString, Унаследованный от базового класса System. Object

Управление поведением верификации посредством свойства AutoValidate

так сделано по соображениям обратной

По умолчанию приложения Windows Forms 2.0, когда вы устанавливаете в True Свойство Cancel Аргумента события Validating, Будут вести себя так же, как в предыдущих версиях, — это предотвращает уход фокуса с элемента управления и прекращает процесс верификации, так что событие Validated Не запускается. Так сделано по соображениям обратной совместимости. Однако в класс ContainerControl Было включено новое свойство, которое позволяет вам при желании модифицировать такое поведение. Если вы собираетесь производить верификацию программно для всей формы, или просто не хотите заставлять пользователей корректировать проблемные элементы управления по одному, вы можете изменить значение свойства AutoValidate Для формы. Это свойство принимает значение перечислимого типа AutoValidate, Который позволяет устанавливать любое из значений, описанных в таблице 10.3. Значением по умолчанию для этого свойства является Enable Prevent FocusChange, Которое моделирует поведение. NET 1.1. Обычно вы будете устанавливать AutoValidate Равным EnableAllow — FocusChange Или Disable, Если собираетесь вручную производить верификацию на уровне формы, используя метод ValidateChildren, Описанный в следующем разделе. Как упоминалось выше, метод validate производит верификацию текущего элемента управления в фокусе и каждого из его предков. Однако чаще требуется верифицировать все элементы управления на форме в ответ на некоторое событие, например, нажатие пользователем кнопки Save или Submit. В. NET 2.0 это становится чрезвычайно просто, причем у вас есть ряд опций для контроля над тем, что будет происходить в процессе верификации.

Если вы хотите произвести верификацию всех элементов управления на форме или их подмножества, определяемого некоторыми общими атрибутами, вы можете вызвать метод Validatechildren Класса ContainerControl. От ContainerControl Производятся Form, UserControl И другие классы, поэтому они наследуют эту функцию верификации. Имеются две перегрузки метода Validatechildren, Одна без аргументов, а другая с перечислимым аргументом типа ValidationConstraints .

Извлечение данных при помощи сохраняемых процедур

сохраняемая процедура может быть просто

Когда вы работаете с сохраняемыми процедурами, часто бывает необходимо предоставить им параметры, которые повлияют на их исполнение. Сохраняемая процедура может быть просто оболочкой запроса, который будет возвращать строки данных, либо она может обновлять, добавлять или удалять данные в базе данных. В любом из этих случаев вы обычно должны сообщить сохраняемой процедуре, над какими данными она должна производить операции, и это делается посредством параметров. Давайте начнем с простого примера. В базе данных Northwind определена сохраняемая процедура с именем CustOrderHist. Вы предоставляете ей ID заказчика, и она возвратит результирующий набор, содержащий сводку продуктов и их количеств, заказанных этим заказчиком. Для вызова сохраняемых процедур в ADO. NET используется класс SqlCommand, как демонстрировалось выше. Однако вам нужно сообщить объекту команды, что вы вызываете сохраняемую процедуру, а не передаете текстовый запрос. Вы также должны предоставить объекту команды любые параметры, которые необходимо передать исполняемой процедуре. Как это делается, показывает листинг Г. 6. В данном случае вы создаете объект команды, специфицируя не строку запроса SQL, а имя сохраняемой процедуры, которую хотите вызвать, и устанавливаете свойство CommandType Команды равным StoredProcedure . Затем вам нужно создать объект SqlParameter , чтобы инкапсулировать каждый из параметров, необходимых сохраняемой процедуре, и добавить их к коллекции Parameters Команды. Как только все подготовлено, вы можете, как и раньше, вызвать метод Fill Адаптера данных, и он вызовет указанную сохраняемую процедуру, поместив результирующий набор в таблицу в наборе данных.

Функции Add Query

если вы хотите получить аналогичные

Функции Add Query доступны только для типизированных наборов данных, входящих в проект Windows Forms. Если вы хотите получить аналогичные функциональные возможности для набора данных, определенного в другой сборке, например, в сборке уровня доступа к данным, вам придется вручную добавить запрос в адаптер таблицы, вручную добавить Toolstrip И его элементы управления на форму и написать код, исполняющий запрос через метод адаптера таблицы и помещающий результаты в соответствующий источник привязки для формы. Иными словами, конструктор поможет вам только в том случае, когда вы следуете плохой методике проектирования и размещаете код доступа к данным внутри проекта Windows Forms. Вторым пунктом в нижней части контекстной закладки, отображаемым для каждого элемента управления или компонента, привязанного к типизированному набору данных в проекте Windows Forms, является Preview Data. При его выборе откроется диалог Preview Data, изображенный на рис. 5.23. Если щелкнуть на кнопке Preview в этом диалоге, будет исполнен соответствующий метод GetData Адаптера таблицы и в разделе Results будут отображены данные для предварительного просмотра. Элементы управления ComboBox И ListBox Снабжены контекстными закладками, которые можно использовать для установки их свойств привязки. Прежде всего необходимо пометить флажок Use Data Bound Items, после чего ниже появятся четыре комбинированных поля. Каждое из них позволяет вам открыть окно Data Sources, как описывалось ранее для свойств DataSource И DataMember В окне Properties.

Код XML

datasource содержит xml документ чей

Код XML представляет собой пример простого файла источника данных для Файл. datasource содержит XML-документ, чей корневой элемент называется GenericObjectDataSource. Это не зависит от того, создаете ли вы источник данных объектного типа или же источник типа Web-службы. Единственное различие здесь состоит в том, куда помещается файл. datasource в вашем проекте. Как видно из листинга, корневой элемент может содержать несколько атрибутов, сообщающих информацию о версии, имя источника для отображения в окне Data Sources и информацию о схеме, специфицирующую XML-файлы. datasource. Главное здесь то, что файл источника данных содержит элемент Typelnfo С полностью квалифицированным именем типа объекта, рассматриваемого в качестве источника данных верхнего уровня. В окне Data Sources он представляется корневым узлом дерева. Когда вы раскрываете дерево источника данных, дочерние объекты и свойства определяются окном Data Sources посредством рефлексии.

Помимо информации Typelnfo, Файл источника данных может содержать также информацию об отображении на элементы управления для тех элементов или компонентов данных, для которых отображение было изменено и отличается от установленного по умолчанию. В этом случае в корневой элемент документа добавляется элемент TypeUiSetting. Довольно сложная XML-схема, на которую опирается этот элемент, позволяет для каждого элемента или компонента данных со специальным отображением на элементы управления специфицировать информацию об этом отображении. Эта схема состоит из элемента-коллекции с именем PropertyUlsettings, Включающего в себя некоторое число элементов PropertyUlSetting. Для каждого компонента данных со специальным отображением на элементы управления специфицируется свой элемент PropertyUl Setting. Этот элемент содержит коллекцию настроек элементов управления и информацию о привязываемых элементах управления, которая устанавливает отображение: