- •А.А. Волосевич
- •5. Технология asp.Net 4
- •5. Технология asp.Net
- •5.1. Общие концепции asp.Net
- •5.3. Структура aspx-файла
- •1. Директивы страницы.
- •2. Серверные элементы управления и серверная форма.
- •5.4. Директивы страницы
- •5.5. Класс system.Web.Ui.Page
- •5.6. ЖИзненный цикл страницы
- •1. Подготовка страницы к выполнению
- •1.1. Событие PreInit
- •1.2. Событие Init
- •1.3. Событие InitComplete
- •1.4. Восстановление состояния представления
- •1.5. Обработка данных, принятых в результате возврата формы
- •1.6. Событие PreLoad
- •1.7. Событие Load
- •1.8. Обработка динамически созданных элементов управления
- •2. Обработка возврата формы
- •2.1. Обнаружение изменений в состоянии элементов управления
- •2.2. Обработка серверного события возврата формы
- •3.4. Генерирование разметки
- •3.5. Событие Unload
- •5.7. Общий обзор серверных элементов управления
- •5.8. Элементы управления html
- •5.9. Элементы управления web
- •5.10. Проверочные элементы управления
- •5.11. Эталонные страницы и темы
- •5.12. Некоторые приёмы работы со страницами
- •5.13. Связывание с данными
- •5.14. Списковые элементы управления
- •5.15. Элементы управления для Источников данных
- •5.16. Таблицы, связанные с данными
- •5.17. ОтоБражение отдельных записей
- •5.18. Конфигурирование веб-приложений
- •5.19. Инфраструктура обработки зАпроса
- •5.21. Модель поставщиков
- •5.22. Поддержка Сохранения Состояния
- •5.23. Кэширование в aSp.Net
- •5.24. Обеспечение безопасносТи в веб-приложениях
- •5.25. Управление членством и роЛями
- •5.26. Профили пользователя
- •5.27. Локализация и ресурсы
- •5.28. Пользовательские элементы управления
5.13. Связывание с данными
Под связыванием данных (data binding) будем понимать помещение данных из некоего источника в элемент управления на странице. При разработке страницы применение связывания подразумевает два этапа:
указание на странице или в свойстве элемента управления источника данных;
собственно связывание, то есть перенос данных в элемент управления.
Элементы управления, поддерживающие связывание, имеют в своем составе метод DataBind() для выполнения связывания. Вызов метода DataBind() у родительского элемента управления автоматически ведет к вызову этого метода у дочерних элементов. В частности, вызов DataBind() страницы обеспечивает связывание для всех её элементов.
Будем выделять два вида связывания данных: одиночное и итеративное. Итеративное связывание подразумевает связывание элемента управления с источником, содержащим некоторую коллекцию данных. Элементы управления, пригодные для итеративного связывания, как правило, представляют собой разновидности списков или таблиц. Все они имеют общие свойства, перечисленные в табл. 25.
Таблица 25
Общие свойства, относящиеся к связыванию данных
Свойство |
Описание |
DataSource |
Задаёт источник данных. В роли источника может выступать любой перечислимый объект. При вызове DataBind() выполняется проход по коллекции DataSource, и данные перемещаются в локальное хранилище элемента управления, чтобы затем использоваться для построения разметки элемента |
DataSourceID |
Позволяет указать идентификатор объекта-источника данных (о таких объектах будет подробнее рассказано ниже) |
DataMember |
При помощи свойства конкретизируется коллекция данных, в том случае, если DataSource обладает несколькими пригодными для связывания данных наборами. (типичный пример: DataSource содержит рассоединённый набор данных DataSet, а DataMember указывает на таблицу для связывания) |
DataTextField |
Имя столбца источника данных, в котором содержатся значения, подлежащие выводу в качестве элементов списка. Обычно используется списочными элементами управления |
DataValueField |
Определяет, какое поле источника данных надо использовать для заполнения набора данных списочного элемента управления |
AppendDataBoundItems |
Булево свойство; указывает, нужно ли добавлять загружаемые в элемент управления новые данные в конце существующего набора его данных |
DataKeyField |
Ключевое поле источника данных. Оно используется табличными элементами управления ASP.NET 1.0 и позволяет им идентифицировать запись |
При выполнении связывания данных ASP.NET позволяет указывать в разметке страницы специальные выражения связывания с данными. Выражения связывания с данными ‑ это исполняемый код, заключенный внутрь специальной конструкции <% %> и начинающийся с символа-префикса #. Обычно такие выражения используются для установки значения атрибута в тэге серверного элемента управления. Например, в следующем фрагменте кода разметки формируется надпись, содержащая текущее время:
<asp:Label ID="date" runat="server" Text="<%# DateTime.Now %>" />
Внутри конструкции <%# %> можно вызывать методы страницы, а также методы и свойства компонентов страницы, лишь бы тип результирующего значения отвечал типу свойства, которому вы его присваиваете. Любое выражение связывания с данными вычисляется лишь после вызова метода DataBind(). Если метод DataBind() не вызывается, выражение не вычисляется.
При применении выражений связывания с данными внутри списковых и табличных элементов управления часто используется класс DataBinder. Он позволяет генерировать выражения связывания с данными и осуществлять их разбор. В этом отношении особо важен его перегруженный статический метод Eval(). Данный метод, используя технологию отражения, выполняет синтаксический анализ выражения и вычисляет его значение. Синтаксис вызова метода DataBinder.Eval() обычно бывает таким:
<%# DataBinder.Eval(контейнер.DataItem, выражение) %>
Здесь опущен третий, необязательный, параметр ‑ строка, содержащая установки форматирования возвращаемого значения. Выражение контейнер.DataItem возвращает объект, для которого вычисляется выражение. Обычно контейнером является текущий объект элемента управления, представляющий один отображаемый элемент данных.
Классический синтаксис вызова DataBinder.Eval() в ASP.NET 2.0 может быть несколько упрощен. Эквивалентом предыдущего выражения в ASP.NET 2.0 является выражение <%# Eval(выражение) %>.
ASP.NET 2.0 вводит новый тип выражений для связывания с данными – динамические выражения. В основе динамических выражений лежит новое семейство компонентов ‑ построители выражений. Синтаксис динамических выражений подобен синтаксису выражений связывания с данными, но вместо символа # в качестве префикса в них используется символ $. Такие выражения анализируются при компиляции страницы. Выражение извлекается из её исходного кода, преобразуется в код на языке программирования и вставляется в класс страницы. Существует несколько предопределенных построителей выражений:
AppSettings:XXX ‑ возвращает значение заданной установки из раздела <appSettings> конфигурационного файла.
ConnectionStrings:XXX[.YYY] ‑ возвращает строку XXX из раздела <connectionStrings> конфигурационного файла. Необязательный параметр YYY позволяет указать, какой атрибут вас интересует ‑ connectionString (по умолчанию) или providerName.
Resources:XXX,YYY ‑ возвращает значение глобального ресурса YYY, прочитанное из .resx-файла ресурсов XXX.
Точный синтаксис выражения определяется конкретным построителем, но в общем случае декларативное связывание свойств элементов управления с данными осуществляется следующим образом: атрибут=<%$ выражение %>.