Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Механизмы связывания с данными (инфа) 
:(
    Опции темы
tol05
Дата 17.5.2007, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



Один мой друг признался, что не знает механизмов динамической привязки контролов к данным. А я вспомнил, что и здесь, на форуме как-то натыкался на вопросы об этом.
Вот, написал как сумел, думаю, новичкам будет интересно почитать.  smile 

Для декларативного связывания элементов с данными (в тегах на aspx странице) введено новое динамическое выражение
Код
<%# выражение %>

выражение - свойство/метод или любой код, который возвращает допустимое для связывания значение

Синтаксический анализатор страниц ASP.NET распознает этот символ и автоматически создает для экземляра этого контрола обработчик события DataBinding.
Выражение вычисляется только после вызова метода DataBind() ! Если его не вызвать - связывания не будет. (при вызове метода DataBind() вызывается событие DataBinding, причем все контролы привязываются к данным в той последовательности, в которой они задекларированы на странице aspx)

Новые контролы, представляющие источники данных (например SqlDataSource), привязывают данные к своим контролам управления (например к GridView) без явного вызова DataBind() и не генерируют для страницы события, по которым данные можно запросить. Не подходит к ним выражение <%# выражение %> вот почему

если написать в aspx
Код

<asp:SqlDataSource ID="MySource" runat="server" ConnectionString=<%# ConfigurationManager.ConnectionStrings[...] %> />
<asp:GridView DataSourceID="MySource" ID="MyGrid" runat="server" />

то тогда, вызвав в Page_Load() метод DataBind(), в методе-обработчике DataBindingMySource  свойство MySource.ConnectionString вычисляется и когда анализатор страницы доходит до GridView, то все нормально, методе-обработчике DataBindingGrid MyGrid свои данные получает от MySource

но если мы объявим на странице так
Код

<asp:GridView DataSourceID="MySource" ID="MyGrid" runat="server"/>
<asp:SqlDataSource ID="MySource" runat="server" ConnectionString=<%# ConfigurationManager.ConnectionStrings[...] %> />


то тогда, опять же при вызвове в Page_Load() метода DataBind(), в методе DataBindingGrid обращается за данными к MySource, а он не может их дать, потому что его метод (DataBindingMySource) еще не вызывался (будет вызван после окончания полной обработки MyGrid, в соответствии с деревом елементов страницы) !
Вот и выбрасывается исключение.

Для решения этой проблемы введены новые $-выражения:
Код
<%$ префикс:выражение %>

Код

<asp:GridView DataSourceID="MySource" ID="MyGrid" runat="server"/>
<asp:SqlDataSource ID="MySource" runat="server" ConnectionString="<%$ ConnectionStrings:LocalNWind %>" />

сразу о префиксах. Это "AppSettings", "ConnectionStrings" или "Resources". Для каждого из них есть отдельный класс, построитель выражения. 

Назначение - установка свойств контролов в обход стандартного механизма связывания с данными (но все равно, на этапе синтаксического разбора smile )
Поскольку анализатор в этих строках не видит символа "#" то связывание с данными происходит не при вызове DataBinding-ов (когда уже обрабатываются события страницы), а еще при конструировании элемента управления. Анализатор страницы создает объект построителя выражений и засталяет его это выражение построить уже при парсинге.

Это сообщение отредактировал(а) tol05 - 17.5.2007, 11:32


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0612 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.