Статистика

3. Общее представление о привязке данных в Windows Forms

Класс XPathNodelterator

исходно он позиционируется непосредственно перед

Класс XPathNodelterator Следует модели других итераторов в. NET Framework. Исходно он позиционируется непосредственно перед элементом коллекции, которую он содержит. Вы последовательно вызываете метод MoveNext, Обычно в цикле While, И проверяете возвращаемое булево значение. Если оно равно True, То был еще один узел, куда можно было перейти, и итератор будет позиционирован на этом узле. Если возвращается False, То больше нет узлов, которые можно итерировать. Следующий код демонстрирует процесс загрузки документа, выполнения запроса и итерации по результатам. Свойство Current Итератора возвращает ссылку на XPathNavigator, Позиционированный на текущем узле, который вы можете затем использовать для доступа к содержимому узла, либо для выполнения навигации или дальнейших запросов, относящихся к этому узлу. Этот пример обращается к свойству Value Текущего узла, которое в случае элемента или атрибута является просто его текстовым содержанием. Имеется также свойство Name, Которое возвращает имя узла. Сложность возвращаемых результатов зависит от сложности запроса, который вы выдаете. Для чего-то простого вроде показанного запроса, который просто возвращает набор элементов, содержащих текстовые узлы со значениями, которые вас интересуют, код довольно прямолинеен. Однако результаты XPath-запросов могли бы возвращать любой тип узла, поэтому вам часто требуется некоторая условная логика, которая проверяет тип каждого узла по мере их итерации и модифицирует свои действия в зависимости от типа узла. Тип узла экспонируется свойством NodeType Объекта XPathNavigator, Которое возвращает перечисление типа XPathNodeType.

Конструирование адаптера данных для извлечения данных

чтобы при помощи адаптера данных

До сих пор, при конструировании адаптера данных для извлечения данных, мы устанавливали его свойство SelectCommand На экземпляр SqlCommand, Который инкапсулирует текстовый запрос SQL или сохраняемую процедуру, возвращающую строки, используемые для первоначального заполнения таблицы. Чтобы при помощи адаптера данных производить обновления, вам необходимо также предусмотреть объекты команд для свойств InsertCommand, DeleteCommand И UpdateCommand, В зависимости от того, какие обновления вы собираетесь производить. Как вы и могли бы ожидать, InsertCommand Будет использоваться для любых строк, помеченных как Added, DeleteCommand — для любых строк, помеченных как Deleted, И UpdateCommand — для любых строк, помеченных как Modified. Если набор данных не содержит строк с каким-то состоянием, то нет необходимости предоставлять соответствующую команду, поскольку она использована не будет. Но вообще говоря, вам нужно предусмотреть все три, так как нельзя заранее быть уверенным, что на момент выполнения обновления у вас не будет строк в модифицированном, добавленном или удаленном состоянии. Точно так же, как и команда выбора, используемая для заполнения набора данных, команды, используемые для обновления базы данных набором данных, могут применять либо текстовые запросы SQL, либо сохраняемые процедуры, передавая столбцы обновляемых строк в качестве параметров. Для простых приложений, которым требуется непосредственно работать в каждый момент времени с единственной таблицей в базе данных, вы можете использовать параметризованные текстовые запросы SQL. Для более масштабных приложений вы, возможно, захотите использовать сохраняемые процедуры.

Обработка событий элементов управления

все элементы управления наследуют большой

Как уже упоминалось, основная часть периода жизни приложения Windows Forms определяется обработкой событий элементов управления. Все элементы управления наследуют большой набор событий от базового класса Control. Эти события соответствуют общим сообщениям Windows, которые могут передаваться операционной системой любому окну. Сюда относятся такие события, как щелчки мыши, события клавиатуры, события таймера Windows и события перерисовки. Многие из этих событий имеют один и тот же тип делегата — EventHandler, Представленный выше. Если вам нужно побольше узнать о делегатах и событиях, я порекомендовал бы вам обратиться к какой-нибудь хорошей книге по общему программированию. NET. Некоторые события определяются с использованием более специализированных типов делегатов, которые включают специализированные аргументы события. Эти аргументы несут дополнительную информацию о событии, которая может использоваться подписчиками для обработки события в своих обработчиках. Например, класс Control Определяет события для мыши, среди которых назовем хотя бы MouseUp, MouseDown, MouseMove И MouseWheel. Эти события объявляются как принадлежащие к типу MouseEventHandler. Тип делегата MouseEventHandler В качестве второго параметра в своей сигнатуре принимает объект MouseEventArgs. Класс MouseEventArgs Определяет несколько свойств, которые могут быть использованы для условной обработки в зависимости от специфики события. В число этих свойств входят позиции X и Y в экранных координатах, где произошло событие мыши, какая кнопка была нажата и сколько раз, если событие было щелчком мыши, и на сколько щелчков было прокручено колесико мыши, если событие было вызвано движением колесика.

Элемент управления Object Data Source

b используя элемент b objectdatasource

Решением проблемы тесной сопряженности, возникающей при применении SqlDataSource, Является элемент управления ObjectDataSource. Используя элемент ObjectDataSource, Вы можете легко привязывать элементы управления на вашей странице к любым источникам данных, таким, как специальные рабочие объекты и коллекции в уровневой архитектуре приложения. В свойстве TypeName Элемента управления ObjectDataSource Вы устанавливаете полностью квалифицированное имя типа класса, а в классе должен быть метод, возвращающий коллекцию объектов, к которым следует осуществить привязку. Скажем, у вас есть приложение уровневой архитектуры с уровнем доступа к данным, рабочим уровнем и уровнем представления ASP. NET. Вы хотите привязать сетку на Web-форме к коллекции объектов Customer, Возвращаемых методом из рабочего уровня, однако детали того, как устроены эти объекты, скрыты инкапсуляцией рабочего уровня. Данные должны откуда-то поступать, поэтому с помощью методик, описанных во 2-й главе, я включил в проект типизированный набор данных CustomerDataSet. В классы рабочего уровня входит определение предметного класса Customer, Который содержит фабричный метод для возврата коллекции объектов Customer, Показанный в листинге А.6. Метод GetCustomers Использует определенный в типизированном наборе данных адаптер CustomersTableAdapter Для извлечения коллекции данных о заказчиках, которыми он заполняет объекты простого предметного класса, и возвращает последние в виде списка List Элемент управления AccessDataSource Обеспечивает упрощенную поддержку привязки к данным, поступающим из базы данных Microsoft Access. Чтобы использовать его, вы устанавливаете в свойстве DataFile Маршрут к файлу базы данных. Класс элемента управления является производным от SqlDatasource И поддерживает только чтение данных; если требуется обновлять данные, следует применять SqlDataSource. В действительности AccessDataSource Использует провайдер данных OLE DB, поэтому можно параметризовать запросы только по позициям, подставляя в качестве заместителя параметров символ? .

Целесообразность композитного элемента управления

вы можете инкапсулировать расположение и

В сценарии такого рода целесообразность композитного элемента управления, производного от UserControl, представляется очевидной. Вы можете инкапсулировать расположение и обработку событий от группы элементов управления в своем специальном композитном элементе управления, а затем добавить его при надобности на любую форму или несколько форм. Вам придется сопровождать всего одну логическую единицу кода, и у вас будет развитая поддержка конструктора для создания элемента управления и добавления его к другим формам. См. пример реализации специального пользовательского элемента управления в разделе «Создание специального пользовательского элемента управления» настоящего приложения. Формы имеют специфический период жизни, с которым вам необходимо познакомиться. Как и все классы в. NET, формы и элементы управления имеют конструктор, где вы будете размещать основную часть инициализации элементов класса и дочерних элементов управления. Формы и элементы управления следуют модели. NET, реализуя интерфейс IDisposable, который предусматривает для клиентов класса единообразный способ сообщить классу, что они закончили с ним работать, позволяя ему, таким образом, освободить любые автономные ресурсы, которые он содержит. В формах и элементах управления имеется реализация базового класса для метода Dispose, которую вы можете переопределить, чтобы предусмотреть любой специальный код очистки для автономных ресурсов, которые может инкапсулировать ваша форма. Если вы переопределяете метод Dispose, этот код будет вызываться Framework при закрытии формы. Вы никогда не должны забывать вызвать реализацию Dispose вашего базового класса, чтобы дать ему возможность освободить те ресурсы, которые он инкапсулирует. Файл кода конструктора Windows Forms в Visual Studio 2005 содержит переопределение метода Dispose, и если вам нужно гарантировать, что ваши собственные элементы-переменные уничтожаются, вам нужно будет добавить соответствующий код в этот метод в файле кода конструктора.