|
|
Ответов: 0
|
25-02-12 07:01
|
|
|
|
Ответов: 0
|
16-01-12 20:13
|
|
|
|
Ответов: 1
|
09-01-12 11:23
|
|
   Web - программирование
|
|
|
   Программирование под ОС
|
|
|
   Web - технологии
|
|
|
   Базы Данных
|
|
|
|
Возможно вас заинтересует
|
|
Основы создания серверных элементов управления. События
Итак что же нужно для того, чтобы наш пейджер начал реально работать? Не так уж и много на самом деле - нужно всего лишь описать делегат, определить событие в элементе управления и, при необходимости, описать структуру, передающую данные в обработчик события. И начнем мы с объявления делегата.
Делегат по сути является указателем на функцию в терминах С++. Для делегатов, определяющих события в серверных контролах, накладываются дополнительные ограничения - такой делегат должен принимать 2 параметра, первый из которых должен быть типа object (в нем передается ссылка на объект, сгенерировавший данное событие), а второй - типа EventArgs (в этом параметре передается дополнительная информация, связанная с вызываемым событием). Класс EventArgs - базовый класс для всех классов, передающих дополнительную информацию, сам по себе он не содержит никаких свойств для передачи информации и используется в случаях, когда событие просто объявляет о том, что оно произошло (например событие Click серверного элемента управления Button). В нашем же случае необходимо в событии передать дополнительные данные - новый номер страницы. Посему для передачи этих данных определим класс - наследник класса EventArgs.
public class PagerEventArgs : EventArgs
{
public int SelectedPage;
public PagerEventArgs(int SelectedPage)
{
this.SelectedPage = SelectedPage;
}
}
После чего объявление делегата для нашего события не представляет никакой проблемы:
public delegate void PagerEventHandler(Object sender, PagerEventArgs e);
И, соответственно, добавим свойство этого типа в наш класс.
public class Pager : WebControl
{
public event PagerEventHandler Navigate;
...
}
Теперь необходимо опять обратиться к теории. Нам необходимо, чтобы наш элемент управления во первых умел генерировать постбеки, а во вторых умел получать и обрабатывать информацию постбека. При этом также необходимо, чтобы при постбеке передавалась информация о номере страницы, клик на которую инициировал его. И такая возможность есть, мало того реализовать ее в нашем элементе управления - дело 5 минут :).
Помните, в предыдущей статье при отрисовке тегов <a> я забивал пустышкой тег href? Пришло время исправить это и добавить вызов клентской функции, генерирующий постбек. Для этого можно воспользоваться методами Page.GetPostBackEventReference или Page.GetPostBackClientHyperlink (работа этих методов практически идентична, разница лишь в том, что GetPostBackClientHyperlink добавляет в начало возвращаемой строки строку "javascript:"). данные методы принимают 2 параметра - указатель на элемент управления, генерирующий постбек, и строка с дополнительной информацией. В нашем случае значениями этих параметров будут ссылка this и номер страницы линка. Соответственно теперь код, выводящий номер страницы, будет выглядеть так:
output.AddAttribute(HtmlTextWriterAttribute.Href, Page.GetPostBackClientHyperlink(this, (pgIndex - 1).ToString()));
output.RenderBeginTag(HtmlTextWriterTag.A);
output.Write(pgIndex.ToString());
output.RenderEndTag();
Для получения же постбека тоже особой работы не нужно - необходимо всего лишь реализовать интерфейс IPostBackEventHandler в нашем контроле управления. Т.е. реализовать метод RaisePostBackEvent данного интерфейса. Этот метод принимает один параметр - строку, содержащую дополнительные данные, которые мы определяли при вызове метода Page.GetPostBackClientHyperlink.Теперь же нам осталось только получить эти данные (ведь именно в этом параметре находится номер выбранной страницы) и вызвать событие.
Но для начала определим отдельный метод, проверяющий наличие присоединенного обработчика события и вызывающий его если обработчик есть. Этот метод обычно имеет префикс On перед именем события:
protected virtual void OnNavigate(PagerEventArgs e)
{
if (Navigate != null)
Navigate(this, e);
}
И только теперь реализуем метод RaisePostBackEvent
public void RaisePostBackEvent(string arg)
{
int cmd = Int32.Parse(arg);
PagerEventArgs e = new PagerEventArgs(cmd);
CurrentPage = cmd;
OnNavigate(e);
}
Все, на этом процесс реализации функциональности нашего пейджера завершен. Полный код элемента управления вы можете скачать по ссылке в конце статьи.
В данной статье я описал только малую часть вопросов, связанных с разработкой собственных элементов управления и совсем ничего не сказал про многие другие аспекты этой проблемы. Но назвать их и постараться показать примерные пути их решения я могу :). Итак кроме генерации событий, основанных на постбеке элемента управления существуют также вопросы обработки данных при постбеке (интерфейс IPostbackDataHandler), сохранение/восстановление состояния элементов управления при постбеке (методы LoadViewState и SaveViewState), проблемы и решения реализации большого количества событий в классе (класс EventHandlerList) и шаблонные элементы управления. Отдельным большим куском создания элементов управления идет и создание дизайнеров. Но все это темы для отдельных статей, которые возможно я когда-то также соберусь написать :).
Последние статьи: Web - программирование / ASP.NET /
| |
| | |
Делается это просто, кидаем на форму DropDownList и SqlDataSource. Для SqlDataSource - указываем строку подключения к базе данных и запрос, который будет выбирать данные. В DropDownList указываем какой DataSource использовать (DataSourceID=SqlDataSource1), а также настраиваем что будет отображаться (DataTextField=name), а что будет в качестве значения DataValueField=id. Вот в общем то и все... подробнее
|
Кол. просмотров: общее - 170498 сегодня - 1
|
|
Файл web.config используется для хранения глобальных параметров web-приложения. В файле web.config удобно хранить настройки для веб-приложения, ну хоть бы и параметры подключения к базе данных. В общем виде параметр добавляется так... подробнее
|
Кол. просмотров: общее - 88092 сегодня - 3
|
|
Сегодня попробуем смастерить форму для загрузки файла на сервер с помощью технологии ASP .NET
Итак, моздаем новый сайт в Visual Studio 2005 с сразу в папке проекта создаем папку files в которую будут попадать загруженные файлы... подробнее
|
Кол. просмотров: общее - 8174 сегодня - 0
|
|
Сейчас мы рассмотрим задачу выборки данных из таблицы с помощью обычных запросов, а также с помощью хранимых процедур... подробнее
|
Кол. просмотров: общее - 5682 сегодня - 2
|
|
Думаю многие хотя бы раз задавались вопросом: есть ли в ASP .NET include (инклуд) файлов, как например в PHP и SSI. Конечно в ASP .NET есть свои примочки такие как MasterPage и UserControls. Но все таки можно ли include?? :) Можно... подробнее
|
Кол. просмотров: общее - 6202 сегодня - 2
|
|
|
|