Использование элемента управления Wizard (Мастер)

advertisement
Лабораторная работа № 4
Использование элемента управления Wizard (Мастер)
1. ЦЕЛЬ РАБОТЫ
Целью работы является рассмотреть особенности создания Web-форм с элементом
управления Wizard (Мастер).
2. СОСТАВ РАБОЧЕГО МЕСТА
2.1. Оборудование: IBM-совместимый персональный компьютер (ПК).
2.2. Программное обеспечение: операционная система Windows, среда разработки
Microsoft Visual Studio 2008.
3. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Мастера
Эталонные страницы и темы оформления — прекрасные средства разработки
единообразных страниц с богатым интерфейсом, имеющих одинаковое графическое
оформление, одинаковое расположение элементов управления и даже одинаково
функционирующих. Одним из распространенных видов страниц со сложным интерфейсом
являются мастера.
Чаще всего они используются в настольных приложениях Windows, но не являются
редкостью и в Web-приложениях. Мастер — это особый компонент, который проводит
пользователя через последовательность шагов, необходимых для получения определенного
результата. Он реализуется в виде набора единообразно оформленных экранов (окон или
страниц), которые выводятся друг за другом и содержат элементы управления, необходимые
для ввода данных.
Обязательной принадлежностью всякого мастера является пара кнопок или ссылок для
перехода к следующему либо предыдущему экрану. Концептуально мастер — очень простой
компонент, но реализовать его через HTTP не всегда просто. Поэтому каждый, кому
приходилось заниматься разработкой приложений для Web, с радостью встретит нововведение
ASP.NET 2.0 элемент управления Wizard, предназначенный для реализации мастеров.
Обзор возможностей элемента управления Wizard
Элемент управления Wizard поддерживает как линейную, так и нелинейную навигацию.
Он позволяет возвращаться назад для изменения введенных ранее значений и пропускать шаги,
которые на этот раз не нужны — то ли потому, что пользователь ввел определенные установки
на предыдущих шагах, то ли потому, что он просто не хочет заполнять определенные поля.
Подобно многим другим элементам управления ASP.NET, Wizard поддерживает темы, стили и
шаблоны.
Будучи составным элементом управления, Wizard автоматически генерирует несколько
стандартных элементов интерфейса мастеров, в частности навигационные кнопки и панели. Как
вы увидите чуть позже, он поддерживает несколько шаблонов, благодаря которым возможна
глубокая настройка всего его пользовательского интерфейса. Элемент управления Wizard
гарантирует правильное управление состоянием мастера независимо от того, как пользователь
перемещается между его экранами — вперед, назад или прямо к определенному экрану. Все
шаги мастера должны быть определены в рамках одного экземпляра элемента управления
Wizard. Иными словами, мастер должен быть целостным компонентом.
Структура мастера
Как видно на рисунке, мастер состоит из четырех частей: заголовка, области
представления и двух панелей — навигационной и боковой.
Заголовок мастера — это текст, задаваемый посредством свойства HeaderText. Для его
оформления предусмотрено стилевое свойство; кроме того, можно изменить структуру
заголовка, используя соответствующее свойство-шаблон. Если свойство HeaderText оставлено
пустым и пользовательский шаблон не задан, мастер не имеет заголовка.
В области представления выводится основное содержимое текущего экрана мастера.
Каждый экран (то есть каждый шаг мастера) должен быть определен с помощью элемента
<asp:wizardstep>, который соответствует элементу управления WizardStep.
Поддерживаются разные типы экранов мастера, но все они являются производными от
базового класса WizardStepBase.
Группа тэгов, представляющих экраны мастера, должна быть заключена внутрь тэга
<wizardsteps>:
<asp:wizard runat="server" DisplaySideBar="true">
<wizardsteps>
<asp:wizardstep runat="server" steptype="auto" id="step1">
First step
</asp:wizardstep>
<asp:wizardstep runat="server" steptype="auto" id="step2">
Second step
</asp:wizardstep>
<asp:wizardstep runat="server" steptype="auto" id="finish">
Final step
</asp:wizardstep>
</wizardsteps>
</asp:wizard>
Навигационная панель состоит из автоматически генерируемых кнопок, с помощью
которых пользователь может перейти к следующему, предыдущему или последнему экрану
мастера. Внешний вид и состав этой панели можно определить с помощью стилей и шаблонов.
Необязательная боковая панель служит для вывода некоторой вспомогательной
информации в левой части экрана мастера. Обычно на ней отображается перечень шагов,
которые необходимо осуществить для выполнения задачи, реализуемой с помощью мастера. По
умолчанию здесь выводится описание каждого шага, а текущий шаг выделен полужирным
шрифтом. Эту панель также можно конфигурировать с применением стилей и шаблонов.
На рисунке показано, какой интерфейс мастер имеет по умолчанию. Названия шагов
определяются идентификаторами представляющих их тэгов <аsр:wisardstep>.
Стили и шаблоны мастера
Оформлению с помощью стилей подлежат все составляющие элемента управления Wizard
(включая кнопки), для чего используются свойства, перечисленные в табл. 1.
Табл. 1. Стилевые свойства элемента управления Wizard
CancelButtonStyle
FinishCompleteButtonStyle
FinishPrevionsButtonStyle
HeaderStyle
NavigationButtonStyle
NavigationStyle
SideBarButtonStyle
SideBarStyle
StartStepNextButtonStyle
StepNextButtonStyle
StepPreviousButtonStyle
StepStyle
Кнопка Cancel
Кнопка Finish
Кнопка Previous на последнем шаге
Заголовок мастера
Навигационные кнопки мастера
Навигационная область
Кнопки боковой панели
Боковая панель
Кнопка Next на первом шаге
Кнопка Next
Кнопки Previous
Область представления
Содержимое заголовка, боковой и навигационной панелей можно также настраивать с
помощью шаблонов. Перечень доступных шаблонов приведен в табл. 2.
Табл. 2. Шаблонные свойства элемента управления Wizard
FinishNavigationTemplate
Навигационная панель, отображаемая на последнем
шаге мастера. По умолчанию она содержит кнопки
Previous и Finish
HeaderTemplate
Строка заголовка мастера
SideBarTemplate
Левая панель мастера
StartNavigationTemplate
Навигационная панель, отображаемая на первом
шаге мастера. По умолчанию содержит только кнопку
Вперед
StepNavigationTemplate
Навигационная панель, отображаемая на всех шагах
мастера, кроме первого и последнего
Программный интерфейс мастера
Далее приведен список всех свойств элемента управления Wizard, за исключением
стилевых и шаблонных свойств, а также свойств, определенных в базовых классах.
Свойство
ActiveStep
Описание
Возвращает объект, представляющий текущий шаг мастера. Этот
объект является экземпляром класса WizardStep
Возвращает и позволяет задать О-базированный индекс текущего
ActiveStepIndex
шага мастера
DisployConcelButton Включает и отключает видимость кнопки Cancel. По умолчанию
имеет значение false
Включает и отключает видимость боковой панели. По умолчанию
DisplaySideBar
имеет значение false
Возвращает и позволяет задать заголовок мастера
HeaderText
Возвращает и позволяет задать подсказку, которую элемент
SkipLinkText
управления связывает с невидимым изображением как
информацию для программных синтезаторов речи,
осуществляющих чтение информации с экрана. Значением
свойства по умолчанию является строка Skip Navigation Links,
локализуемая согласно текущей локализации сервера
Возвращает коллекцию, содержащую все объекты WizardStep,
WizardSteps
определенные для элемента управления
Во время выполнения страницы мастер представлен набором объектов, соответствующих
его шагам и кнопкам. Различаются следующие типы кнопок мастера: StartNext, StepNext,
StepPrevious, FinishComplete, FinishPrevious и Cancel. Каждая из них имеет свойства,
посредством которых задаются URL изображения кнопки, ее надпись, тип и URL, по которому
осуществляется переход после щелчка этой кнопки. Именем свойства является имя кнопки, за
которым следует определенный суффикс. Перечень поддерживаемых суффиксов приведен в
табл. 3
Табл.3. Суффиксы имен свойств кнопок
Суффикс
ButtonlmageUrl
Описание соответствующего свойства
Возвращает и позволяет задать URL изображения, используемого для
рендеринга кнопки
Возвращает и позволяет задать текст кнопки
ButtonText
Возвращает и позволяет задать тип кнопки: обычная, изображение,
ButtonType
ссылка
DestinationPageUrl Возвращает и позволяет задать URL для перехода по щелчку кнопки
В табл.3 приведены суффиксы, а не полные имена свойств. Соответствующие им четыре
свойства могут иметь кнопки всех типов. Полное же имя свойства состоит из имени кнопки, за
которым
следует
один
из
суффиксов,
например:
CancelButtonText,
FinishCompleteDestinationPageUrl и т. д.
Элемент управления Wizard поддерживает и несколько интересных методов. Одним из
них является метод GetHistory, определяемый следующим образом:
public ICollection GetHistory();
Он возвращает коллекцию объектов WizardStepBase, представляющих уже
отображавшиеся экраны мастера. Порядок следования элементов коллекции обратен порядку
вывода экранов. Первый объект коллекции, то есть объект с индексом 0, представляет текущий
шаг мастера, второй — его предыдущий шаг и т. д.
Еще один метод указанного элемента управления, MoveTo, используется для перехода к
определенному экрану мастера. Вот его прототип:
public void MoveTo(WizardStepBase step);
Данному методу нужно передать объект WizardStepBase, но получить его не всегда
просто. Однако поскольку сам метод является всего лишь оболочкой для мутатора свойства
ActiveStepIndex, то в том случае, если вы хотите перейти к определенному экрану мастера, но
не имеете экземпляра соответствующего объекта WizardStep, проще установить свойство
ActiveStepIndex.
На протяжении своего жизненного цикла элемент управления Wizard генерирует ряд
событий; они перечислены в табл. 4
Табл. 4. События элемента управления Wizard.
Событие
Active ViewChanged
Когда происходит
Сменился экран
CancelButtonClick
FinishButtonClick
NextButtonClick
PreviousButtonClick
Пользователь щелкнул кнопку Cancel
Пользователь щелкнул кнопку Finish
Пользователь щелкнул кнопку Next
Пользователь щелкнул кнопку Previous
SideBarButtonClick
Пользователь щелкнул кнопку на боковой панели
Как видите, с каждой из кнопок мастера связано свое событие, которое можно обработать
желаемым образом.
Добавление экранов мастера
В объектной иерархии страницы конкретному экрану мастера (а точнее, его области
представления) соответствует объекта класса WizardStep. Данный класс является производным
от класса View и определяет несколько дополнительных открытых свойств. Объект View всегда
имеет родительский элемент управления MultiView, который мастер и использует для
формирования экрана. Однако класс мастера не является производным от класса MultiView.
В теле страницы объявления всех экземпляров класса WizardStep, то есть всех экранов
мастера, группируются внутри тэга <WizardSteps>. Данный тэг соответствует одноименному
свойству-коллекции элемента управления Wizard.
<WizardSteps>
<asp:WizardStep>
</asp:WizardStep>
<asp:WizardStep>
</asp:WizardStep>
</WizardSteps>
Каждый экран мастера имеет тип и заголовок. В заголовке (свойство Title) выводится
краткое описание назначения данного экрана. Эта информация не используется, если вывод
боковой панели отключен. Если же боковая панель активна, из заголовков экранов составляется
выводимый на ней список шагов мастера. Когда боковая панель активна, но заголовки
некоторых экранов не заданы, для заполнения указанного списка используются значения
свойства ID объектов WizardStep .
Определяя очередной шаг мастера, можно задать для него свойство AllowReturn,
указывающее, может ли пользователь возвращаться к этому шагу, если он уже перешел к
следующему. По умолчанию данное свойство имеет значение true.
Типы экранов мастера
Свойство StepType объекта WizardStep указывает, как должен обрабатываться и
выводиться данный экран мастера. Его допустимыми значениями являются элементы
перечисления WizardStepType .
Значение по умолчанию; когда оно задано, мастер сам определяет, как
должен интерпретироваться экран
Complete Последний экран мастера, обычно выводимый по окончании работы с
ним пользователя. На этом экране навигационная и боковая панели
отсутствуют
Последний из экранов мастера, используемых для ввода данных от
Finish
пользователя. На нем нет кнопки Next, но есть кнопки Previous и Finish
Первый экран мастера, не содержащий кнопки Previous
Start
Все промежуточные страницы, на которых выводятся кнопки Previous и
Step
Next
Когда мастер работает в автоматическом режиме {Auto), он определяет тип каждого
экрана, основываясь на порядке его расположения в исходном файле страницы. Первому экрану
он назначает тип Start, последнему — Finish, а экран Complete в таком случае у мастера
отсутствует. Если же экранам явно назначены типы, порядок их определения в исходном файле
страницы не имеет значения.
Auto
Создание экрана, предназначенного для ввода данных
Ниже приведен пример определения экрана, предназначенного для ввода имени
провайдера и строки подключения, которая будет использоваться для соединения с базой
данных и поиска в ней информации. Содержимое экрана заключено внутрь тэга <div>,
определяющего панель фиксированной высоты. Если сконфигурировать таким же образом все
остальные экраны мастера, размер и структура страницы при переходе от одного экрана
мастера к другому меняться не будут.
<asp:wizardstep ID="Wizardstep1" runat="server" title="Connect">
<div style="height:200px;width:400px;margin:10;"> <table>
<tr><td>Provider</td><td>
<asp:textbox runat="server" id="ProviderName" width="250px"
text="System.Data.SqlClient" /> </td></tr>
<tr><td>Connection String</td><td>
<asp:textbox runat="server" id="ConnString" width="250px"
text="SERVER=(local);DATABASE=northwind;UID=...; " /> </td></tr>
<tr><td height=" 100px"x/td></tr> </table>
</div> </asp:wizardstep>
Обычно мастер создается для ввода данных от пользователя, поэтому важно правильно
осуществлять их валидацию. Это можно делать двумя способами, не исключающими друг
друга: с помощью валидаторов и обработчиков событий перехода.
Для реализации первого способа нужно включить в состав экрана мастера валидационные элементы управления. Тогда ошибки ввода, такие как незаполненные обязательные
поля и неверные типы данных, будут мгновенно перехватываться, причем вы, вероятнее всего,
захотите, чтобы это происходило на клиенте.
Если же для проверки введенных данных вам необходимо иметь доступ к серверным
ресурсам, следует прибегнуть к обработчикам событий перехода. Под событиями перехода
подразумевается события, которые генерируются мастером накануне перехода к другому
экрану. Например, когда пользователь щелкает кнопку Next, чтобы перейти к следующему
шагу мастера, генерируется событие NextButtonClick. Вы можете перехватить его, выполнить
валидацию введенных данных и при необходимости отменить переход. Мы продолжим
обсуждение этого вопроса чуть позже.
Определение боковой панели
Как уже было сказано, на боковой панели мастера выводится список кнопок для
произвольного перехода к тому или иному его шагу. Отображение этой панели можно включать
и отключать с помощью атрибута DisplaySideBar, а ее содержимое определяется значением
свойства SideBarTemplate.
Не все в структуре боковой панели оставлено на ваше усмотрение. В частности, внутри
тэга <SideBarTemplate> обязательно должен присутствовать элемент управления DataList со
стандартным идентификатором SideBarList. Кроме того, блок <ItemTemplate> должен
содержать кнопку с именем SideBarButton. Она может быть представлена любым объектом,
реализующим интерфейс IButtonControl.
Навигация по экранам мастера
Когда пользователь щелкает кнопку для перехода к другому шагу мастера, генерируется
событие, в обработчике которого принимается решение о том, допустимы ли введенные
пользователем данные и следует ли осуществлять переход.
В большинстве случаев серверная валидация выполняется, когда пользователь для
завершения работы с мастером щелкает кнопку Finish. В этот момент можно проверить, все ли
необходимые данные ввел пользователь и все ли обязательные операции он выполнил. Код,
связанный с событием FinishButtonClick, выполняется лишь однажды и именно тогда, когда это
необходимо.
Что касается обработчиков событий кнопок Next и Previous, то они выполняются при
каждом переходе от экрана к экрану. Возврат формы осуществляется при каждом из этих
событий.
Управление навигацией с помощью событий
Серверную валидацию стоит производить в том случае, когда дальнейшие действия
мастера зависят от введенных пользователем данных. В подобных случаях обычно определяют
обработчик события NextButtonClick:
<asp:wizard runat="server"
id="QueryWizard"
OnNextButtonClick="OnNext">
</asp:wizard>
Если пользователь возвращается к предыдущему экрану, что он ввел, не имеет значения валидацию этих данных пока можно не выполнять, предполагая, что он еще вернется и,
возможно, их изменит.
Когда активна боковая панель, пользователь может перемещаться между экранами в
произвольном порядке. Если реализуемая вами логика мастера требует, чтобы для перехода к
определенному шагу выполнялось некоторое условие, следует написать обработчик события
SideBarButtonClick и убедиться в нем, что это условие выполняется.
Для данного события необходим делегат WizardNavigationEventHandler
public delegate void WizardNavigationEventHandler(
object sender,
WizardNavigationEventArgs e);
Структура WizardNavigationEventArgs имеет два полезных свойства, которые содержат 0базированные индексы текущей страницы и той, к которой пользователь хочет перейти, — это
свойства CurrentStepIndex и NextStepIndex. Заметьте, что оба они доступны только для чтения.
Каждый экран мастера является чем-то вроде панели, определенной в составе
родительского элемента управления, которым является мастер. Это означает, что все дочерние
элементы управления каждого из экранов должны иметь уникальные идентификаторы и что к
каждому из этих элементов можно обращаться по имени. Например, если одна из страниц
содержит текстовое поле с именем ProviderName, к нему можно обратиться в обработчике
любого события, используя идентификатор ProviderName.
Отмена перехода
Помимо двух упомянутых выше свойств структура WizardNavigationEventArgs содержит
также доступное для чтения и записи булево свойство Cancel. Если присвоить ему значение
true, переход к указанному пользователем экрану будет отменен. Ниже приведен код,
демонстрирующий, как предотвратить переход к следующему экрану мастера, если на первом
шаге пользователь ввел в качестве своего идентификатора строку sa:
void OnNext(object sender, WizardNavigationEventArgs e) {
if (e.CurrentStepIndex == 0 &&
ConnString.Text.IndexOf("UID=sa") > -1)
{
e.Cancel = true;
return;
}
}
Переход можно отменять в обработчике любого события перехода, не только NextButtonClick. Так поступают, когда результат серверной валидации говорит о том, что
пользователь ввел недопустимые данные. При этом вы сами должны позаботиться о выводе
соответствующего сообщения.
На завершающем этапе своей работы все мастера выполняют определенный код,
реализующий ту операцию, ради которой они создавались.
Если мастер содержит экран типа Complete, этот экран должен отображаться после того,
как пользователь щелкнет кнопку Finish и будет выполнена завершающая операция мастера.
Если что-то пойдет не так, придется либо отменить переход, чтобы предотвратить вывод
Сотрletе-экрана, либо адаптировать его пользовательский интерфейс, чтобы на данном экране
выводилось сообщение об ошибке. Какое из двух решений выбрать, зависит от реализуемой
вами операции. Если она может завершиться как успехом, так и неудачей, стоит предоставить
мастеру возможность выполнить переход к заключительной странице и вывести на ней
сообщение о неудачном завершении. Когда же нет сомнений, что эта операция обязательно
должна завершится успешно (если только пользователь сам не откажется от ее выполнения), то
переход осуществлять не следует. В таком случае имеет смысл сообщить пользователю о
произошедшем, предоставив ему возможность задать другие установки и повторить операцию.
4. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
Упражнение 1
Создание Web-формы с элементом управления Wizard
В этом упражнении вы создадите четырехшаговую анкету, используя элемент
управления Wizard
Вы должны обеспечить следующие поля для реализации мастера:
Имя
Фамилия
Адрес
Город
Регион
Страна
Почтовый Код
Регистрация
Откройте веб-сайт, находящийся по адресу~\LabFiles\Starter\language\AdWorksWebSite.
Откройте страницу HR.aspx.
Добавте кнопку для добавления новых служащих в элемент управления Content с ID =
PageContentPlaceHolder.
Установите для кнопки следующие свойства:
Attribute
ID
Text
Value
btnAddEmployee
Add a New Employee
Ваш код должен выглядеть следующим образом:
<asp:Button ID="btnAddEmployee" runat="server" Text="Add a New Employee" />
Создайте новый элемент управления Wizard.
1. С панели инструментов перетащите на веб-форму элемент управления Wizard
непосредственно ниже элемента управления btnAddEmployee Button.
2. Установите для него следующие свойства:
Attribute
Value
ID
DisplayCancelButton
HeaderText
Visible
DisplaySideBar
wizNewEmployee
true
Add New Employee
false
true
3. Добавьте атрибут OnFinishButtonClick и установите его значение
wizNewEmployee_Finish.
4. Добавте атрибут OnCancelButtonClick и установите его значение
wizNewEmployee_Cancel.
Ваш код должен выглядеть следующим образом:
<asp:Wizard ID="wizNewEmployee" runat="server" DisplaySideBar="true"
DisplayCancelButton="true"
HeaderText="Add New Employee" Visible="false"
OnFinishButtonClick="wizNewEmployee_Finish"
OnCancelButtonClick="wizNewEmployee_Cancel">
Добавьте событие OnClick кнопке btnAddEmployee
1. Добавьте атрибут OnClick кнопке btnAddEmployee объявите и устанавите значение
btnAddEmployee_Click.
Ваш код должен выглядеть следующим образом:
<asp:Button ID="btnAddEmployee" runat="server" Text="Add a New Employee"
OnClick=”btnAddEmployee_click” />
2. Создайте в программной части метод btnAddEmployee_Click , чтобы обработать
событие и установите свойствоVisible элемента управления wizNewEmployee равное
true.
Ваш код должен выглядеть следующим образом:
private void btnAddEmployee_Click(object sender,
EventArgs e)
{
wizNewEmployee.Visible = true;
}
Создайте шаблон шага 1 элемента управления Wizard.
1. Установите следующие свойства для элемента управления:WizardStep
Attribute
Value
ID
Title
WizardStep1
Personal Data
2. Добавьте тег <div> в элемент управления WizardStep1, который будет содержать
элемент управления Label и TextBox для имени работника, фамилии, адреса, города,
области, страны, и почтового кода, отделяя каждый элемент управления разрывом
строки.
Ваш код должен выглядеть следующим образом:
<asp:WizardStep ID="Wizardstep1" Title="Personal Data" runat="server">
<div>
<asp:Label ID="lblFirstName" runat="server">First Name</asp:Label><br />
<asp:TextBox ID="txtFirstName" runat="server"></asp:TextBox><br />
<asp:Label ID="lblLastName" runat="Server">Last Name</asp:Label><br />
<asp:TextBox ID="txtLastName" runat="Server"></asp:TextBox><br />
<asp:Label ID="lblAddress" runat="server">Address</asp:Label><br />
<asp:TextBox ID="txtAddress" runat="server"></asp:TextBox><br />
<asp:Label ID="lblCity" runat="server">City</asp:Label><br />
<asp:TextBox ID="txtCity" runat="server"></asp:TextBox><br />
<asp:Label ID="lblState" runat="server">State</asp:Label><br />
<asp:TextBox ID="txtState" runat="server"></asp:TextBox><br />
<asp:Label ID="lblCountry" runat="server">Country</asp:Label><br />
<asp:TextBox ID="txtCountry" runat="server"></asp:TextBox><br />
<asp:Label ID="lblPostalCode" runat="server">Postal Code</asp:Label><br />
<asp:TextBox ID="txtPostalCode" runat="server"></asp:TextBox>
</div>
</asp:WizardStep>
Создайте шаблон шага 2 элемента управления Wizard.
Установите следующие свойства для элемента управления:
Attribute
Value
ID
Title
WizardStep2
Company Data
1. Чтобы выбрать менеджера работника, добавьте тэг < div > в WizardStep2, который
будет содержать элементы управления типа Label с идентификатором lblReportsTo и
типа DropDownList.
2. Выберите элемент управления DropDownList и установите следующие свойства для
элемента управления:
Attribute
Value
ID
DataSourceID
DataTextField
DataValueField
ddlReportsTo
Employees
Name
EmployeeID
Ваш код должен выглядеть следующим образом:
<asp:WizardStep ID="Wizardstep2" Title="Company Data" runat="server">
<div>
<asp:Label ID="lblReportsTo"
runat="server">Reports
To</asp:Label><br />
<asp:DropDownList ID="ddlReportsTo" runat="server"
DataSourceID="Employees" DataTextField="Name"
DataValueField="EmployeeID"></asp:DropDownList>
</div>
</asp:WizardStep>
Создайте шаблон завершающего шага элемента управления Wizard.
1. Добавьте WizardStep в wizNewEmployee.
2. Установите следующие свойства для элемента управления:
Attribute
Value
ID
StepType
Title
WizardstepComplete
Complete
Insert Results
3. Добавьте тэг < div > элементу управления, который будет содержать элемент
управления Label, названный lblComplete.
Ваш код должен выглядеть следующим образом:
<asp:WizardStep ID="WizardstepComplete" Title="Insert Results" runat="server"
StepType="Complete">
<div>
<asp:Label ID="lblComplete" runat="server"></asp:Label>
</div>
</asp:WizardStep>
Создайте код обработчика события отмены элемента управления Wizard.
1. В тэге < script >, создайте метод для события отмены под названием
wizNewEmployee_Cancel, который устанавливает свойство Visible элемента
управления wizNewEmployee в false.
Ваш код должен выглядеть следующим образом:
private void wizNewEmployee_Cancel(object sender,
EventArgs e)
{
wizNewEmployee.Visible = false;
}
Создайте код обработчика события Finish для элемента управления Wizard.
1. В тэге < script >, создайте метод для события Finish под названием
wizNewEmployee_Finish, который:



Вставляет новую запись.
Проверяет, была ли вставка успешна, проверяя, чтобы команда insert источника
данных SqlDataSource возвратила целое число, больше, чем 0.
Отображает сообщение, которое показывает, была ли вставка успешна или нет.
Ваш код должен выглядеть следующим образом:
private void wizNewEmployee_Finish(object sender,
WizardNavigationEventArgs e)
{
Employees.InsertParameters.Add("FirstName",
txtFirstName.Text);
Employees.InsertParameters.Add("LastName",
txtLastName.Text);
Employees.InsertParameters.Add("Address",
txtAddress.Text);
Employees.InsertParameters.Add("City", txtCity.Text);
Employees.InsertParameters.Add("Region", txtState.Text);
Employees.InsertParameters.Add("Country",
txtCountry.Text);
Employees.InsertParameters.Add("PostalCode",
txtPostalCode.Text);
Employees.InsertParameters.Add("ReportsTo",
ddlReportsTo.SelectedValue);
int recordCount = Employees.Insert();
if (recordCount > 0)
{
lblComplete.Text = "New Employee added "
+ “successfully.";
}
else
{
lblComplete.Text = "New Employee was not added.";
}
}
5. СОДЕРЖАНИЕ ОТЧЕТА
В отчете должны быть представлены:

Исходный код.

Результат выполненной работы в виде скриншотов.
1.
Related documents
Download