Опубликован: 13.07.2010 | Уровень: специалист | Доступ: платный
Самостоятельная работа 34:

Многокадровые элементы управления

Программирование событий элемента управления Wizard

Перейдем от настроек элемента управления Wizard в режиме проектирования к его программированию во время выполнения. Для разработчика задача управления объектами страницы во время выполнения сводится к созданию и программированию обработчиков событий, которые приходят от клиента и на которые могут реагировать эти объекты. Ниже перечислены события, на которые может реагировать экземпляр класса Wizard.

События, поддерживаемые элементом Wizard
Событие О чем информирует пришедшее от клиента событие
ActiveStepChanged Пользователь переключился на новый шаг или код внутри страницы изменил свойство ActiveStepIndex
CancelButtonClick Пользователь щелкнул на кнопке Cancel (Отмена). Кнопка Cancel по умолчанию не отображается, однако ее можно добавить во все представления Step сразу, если установить свойство Wizard.DisplayCancelButton="True". Кнопка Cancel инициирует обратную отсылку, и если не предусмотреть соответствующего обработчика, то ничего не происходит. Но если одновременно определено свойство Wizard.CancelDestinationPageUrl, например, CancelDestinationPageUrl="~/Alternate.aspx", то по щелчку пользователя на этой кнопке ему отправляется другая страница
FinishButtonClick Пользователь дошел до последнего шага и щелкнул на кнопке Finish
NextButtonClick, PreviousButtonClick Эти события возникают при щелчке на кнопке Next или Previous на любом шаге. Но сменить шаг пользователь может и через боковую панель. Чтобы такой момент не упустить и однозначно среагировать на смену шага, лучше вместо этих событий обрабатывать событие ActiveStepChanged
SideBarButtonClick Пользователь щелкнул на ссылке в области боковой панели
Чувствуете?!!! Мы сидим со своим кодом на другом конце провода (на сервере) и ждем очередных пожеланий ненасытного пользователя. При получении от него очередного запроса мы анализируем выбор по присланным событиям и пакуем для него новую посылку, в которую закладываем и требуемый текущий ответ, и интерфейсные элементы для ввода новых пожеланий. Да все это еще должно быть красивым, блестящим и пушистым. Вот Большой Билл нам здесь и помогает - осталось только руки приложить.

Используем событие FinishButtonClick, чтобы усовершенствовать наш пример. Когда пользователь щелкнет в последнем шаге -вкладке на кнопке Finish (Готово), соберем его выбор с каждого шага и вернем в раскрытом представлении этого последнего шага.

  • Откройте страницу WizardControl.aspx в режиме Design и перейдите на последний шаг WizardStep4 для его редактирования
  • Поместите в середину области шага текстовую метку Label из вкладки Standard панели Toolbox, присвойте ей имя lblSummary и очистите ее свойство Text


  • Выделите объект Wizard1 и через панель свойств в режиме Events создайте обработчик для события FinishButtonClick
  • Заполните обработчик следующим кодом
protected void Wizard1_FinishButtonClick(object sender, WizardNavigationEventArgs e)
    {
        // Библиотека Framework 2.0 в нашем распоряжении
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        sb.Append("<h3>");
        sb.Append("Вы выбрали: <br />");
        string title;
  
        title = WizardStep1.Title;
        sb.Append(title + ": " + DropDownList1.Text + "<br />");
  
        title = WizardStep2.Title;
        int index = RadioButtonList1.SelectedIndex;
        if(index != -1) // Если что-то выбрал
            sb.Append(title + ": " + RadioButtonList1.Items[index].Text + "<br />");
  
        /*  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
        // Для элемента класса CheckBoxList нужно проверять коллекцию:
        CheckBoxList CheckBoxList1;
        foreach (ListItem item in CheckBoxList1.Items)
        {
            if (item.Selected)
                sb.Append(item.Text + "; ");
        }
            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
  
        title = WizardStep3.Title;
        if (TextBox1.Text.Length > 0)// Если что-то ввел
            sb.Append(title + ": " + TextBox1.Text + "<br /></br />");
  
        sb.Append("</h3>");
  
        sb.Append("Вам рекомендуется:");
  
        // Отображаем собранные данные
        lblSummary.Text = sb.ToString();
    }
Листинг 34.11. Обработчик события FinishButtonClick в файле WizardControl.aspx.cs

Для формирования строки мы выбрали класс StringBuilder потому, что для хранения информации он резервирует определенный объем памяти, а не перезаписывает измененную строку каждый раз на новое место, как это делает класс String.

  • Перейдите в режиме Design на первый шаг WizardStep1, чтобы автоматически установилось в ноль значение свойства ActiveStepIndex объекта Wizard1 и пользователю вначале отображался первый шаг
  • Выполните страницу, заполните анкету и на последнем шаге щелкните на кнопке Готово

Обработчик отобразит пользователю примерно такой результат

Иван Циферблат
Иван Циферблат
Россия, Таганрог, 36, 2000