| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка под ASP.NET > Механизмы связывания с данными (инфа) |
| Автор: tol05 17.5.2007, 11:28 | ||||||||||
| Один мой друг признался, что не знает механизмов динамической привязки контролов к данным. А я вспомнил, что и здесь, на форуме как-то натыкался на вопросы об этом. Вот, написал как сумел, думаю, новичкам будет интересно почитать. Для декларативного связывания элементов с данными (в тегах на aspx странице) введено новое динамическое выражение
выражение - свойство/метод или любой код, который возвращает допустимое для связывания значение Синтаксический анализатор страниц ASP.NET распознает этот символ и автоматически создает для экземляра этого контрола обработчик события DataBinding. Выражение вычисляется только после вызова метода DataBind() ! Если его не вызвать - связывания не будет. (при вызове метода DataBind() вызывается событие DataBinding, причем все контролы привязываются к данным в той последовательности, в которой они задекларированы на странице aspx) Новые контролы, представляющие источники данных (например SqlDataSource), привязывают данные к своим контролам управления (например к GridView) без явного вызова DataBind() и не генерируют для страницы события, по которым данные можно запросить. Не подходит к ним выражение <%# выражение %> вот почему если написать в aspx
то тогда, вызвав в Page_Load() метод DataBind(), в методе-обработчике DataBindingMySource свойство MySource.ConnectionString вычисляется и когда анализатор страницы доходит до GridView, то все нормально, методе-обработчике DataBindingGrid MyGrid свои данные получает от MySource но если мы объявим на странице так
то тогда, опять же при вызвове в Page_Load() метода DataBind(), в методе DataBindingGrid обращается за данными к MySource, а он не может их дать, потому что его метод (DataBindingMySource) еще не вызывался (будет вызван после окончания полной обработки MyGrid, в соответствии с деревом елементов страницы) ! Вот и выбрасывается исключение. Для решения этой проблемы введены новые $-выражения:
сразу о префиксах. Это "AppSettings", "ConnectionStrings" или "Resources". Для каждого из них есть отдельный класс, построитель выражения. Назначение - установка свойств контролов в обход стандартного механизма связывания с данными (но все равно, на этапе синтаксического разбора Поскольку анализатор в этих строках не видит символа "#" то связывание с данными происходит не при вызове DataBinding-ов (когда уже обрабатываются события страницы), а еще при конструировании элемента управления. Анализатор страницы создает объект построителя выражений и засталяет его это выражение построить уже при парсинге. |