Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_CSharp_5.docx
Скачиваний:
32
Добавлен:
11.11.2019
Размер:
475.45 Кб
Скачать

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.

Точный синтаксис выражения определяется конкретным построителем, но в общем случае декларативное связывание свойств элементов управления с данными осуществляется следующим образом: атрибут=<%$ выражение %>.