Лабораторная работа № 4

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


1. Цель работы

Целью работы является рассмотреть особенности создания Web-форм с элементом управления Wizard (Мастер).

2. Состав рабочего места

2.1. Оборудование: IBM-совместимый  персональный компьютер (ПК).

2.2. Программное обеспечение: операционная система Windows, среда разработки Microsoft Visual Studio 2008.

3. Краткие теоретические сведения

Мастера

Эталонные страницы и темы оформления — прекрасные средства разработки единообразных страниц с богатым интерфейсом, имеющих одинаковое графическое оформление, одинаковое расположение элементов управления и даже одинаково функционирующих. Одним из распространенных видов страниц со сложным интерфейсом являются мастера. 

Чаще всего они используются в настольных приложениях Windows, но не являются редкостью и в Web-приложениях. Мастер — это особый компонент, который проводит пользователя через последовательность шагов, необходимых для получения определенного результата. Он реализуется в виде набора единообразно оформленных экранов (окон или страниц), которые выводятся друг за другом и содержат элементы управления, необходимые для ввода данных.

Обязательной принадлежностью всякого мастера является пара кнопок или ссылок для перехода к следующему либо предыдущему экрану. Концептуально мастер — очень простой компонент, но реализовать его через HTTP не всегда просто. Поэтому каждый, кому приходилось заниматься разработкой приложений для Web, с радостью встретит нововведение 2.0 элемент управления Wizard, предназначенный для реализации мастеров.

НЕ нашли? Не то? Что вы ищете?

Обзор возможностей элемента управления Wizard

Элемент управления Wizard поддерживает как линейную, так и нелинейную навигацию. Он позволяет возвращаться назад для изменения введенных ранее значений и пропускать шаги, которые на этот раз не нужны — то ли потому, что пользователь ввел определенные установки на предыдущих шагах, то ли потому, что он просто не хочет заполнять определенные поля. Подобно многим другим элементам управления , 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

Кнопка Cancel

FinishCompleteButtonStyle

Кнопка Finish

FinishPrevionsButtonStyle

Кнопка Previous на последнем шаге

HeaderStyle

Заголовок мастера

NavigationButtonStyle

Навигационные кнопки мастера

NavigationStyle

Навигационная область

SideBarButtonStyle

Кнопки боковой панели

SideBarStyle

Боковая панель

StartStepNextButtonStyle

Кнопка Next на первом шаге

StepNextButtonStyle

Кнопка Next

StepPreviousButtonStyle

Кнопки Previous

StepStyle

Область представления


Содержимое заголовка, боковой и навигационной панелей можно также настраивать с помощью шаблонов. Перечень доступных шаблонов приведен в табл. 2.

Табл. 2. Шаблонные свойства элемента управления Wizard

FinishNavigationTemplate

Навигационная панель, отображаемая на последнем шаге мастера. По умолчанию она содержит кнопки Previous и Finish

HeaderTemplate

Строка заголовка мастера

SideBarTemplate

Левая панель мастера

StartNavigationTemplate

Навигационная панель, отображаемая на первом шаге мастера. По умолчанию содержит только кнопку Вперед

StepNavigationTemplate

Навигационная панель, отображаемая на всех шагах мастера, кроме первого и последнего

Программный интерфейс мастера

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



Свойство

Описание

ActiveStep 

Возвращает объект, представляющий текущий шаг мастера. Этот  объект является экземпляром класса WizardStep

ActiveStepIndex 

Возвращает и позволяет задать О-базированный индекс текущего шага мастера

DisployConcelButton 

Включает и отключает видимость кнопки Cancel. По умолчанию имеет значение false

DisplaySideBar 

Включает и отключает видимость боковой панели. По умолча­нию имеет значение false

HeaderText 

Возвращает и позволяет задать заголовок мастера

SkipLinkText 

Возвращает и позволяет задать подсказку, которую элемент управления связывает с невидимым изображением как информацию для программных синтезаторов речи, осуществляющих чтение информации с экрана. Значением свойства по умолчанию является строка Skip Navigation Links, локализуемая согласно текущей локализации сервера

WizardSteps 

Возвращает коллекцию, содержащую все объекты WizardStep,
определенные для элемента управления


Во время выполнения страницы мастер представлен набором объектов, соот­ветствующих его шагам и кнопкам. Различаются следующие типы кнопок мастера: 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

Пользователь щелкнул кнопку Cancel

FinishButtonClick

Пользователь щелкнул кнопку Finish

NextButtonClick

Пользователь щелкнул кнопку Next

PreviousButtonClick

Пользователь щелкнул кнопку 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.


Auto        

Значение по умолчанию; когда оно задано, мастер сам определяет, как должен интерпретироваться экран

Complete 

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

Finish        

Последний из экранов мастера, используемых для ввода данных от пользователя. На нем нет кнопки Next, но есть кнопки Previous и Finish

Start        

Первый экран мастера, не содержащий кнопки Previous

Step        

Все промежуточные страницы, на которых выводятся кнопки Previous и Next

Когда мастер работает в автоматическом режиме {Auto), он определяет тип каждого экрана, основываясь на порядке его расположения в исходном файле страницы. Первому экрану он назначает тип Start, последнему — Finish, а экран Complete в таком случае у мастера отсутствует. Если же экранам явно назначены типы, порядок их определения в исходном файле страницы не имеет значения.

Создание экрана, предназначенного для ввода данных

Ниже приведен пример определения экрана, предназначенного для ввода имени провайдера и строки подключения, которая будет использоваться для соединения с базой данных и поиска в ней информации. Содержимое экрана заключено внутрь тэга <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;

}

}

Переход можно отменять в обработчике любого события перехода, не только Next-ButtonClick. Так поступают, когда результат серверной валидации говорит о том, что пользователь ввел недопустимые данные. При этом вы сами должны позаботиться о выводе соответствующего сообщения.

На завершающем этапе своей работы все мастера выполняют определенный код, реализующий ту операцию, ради которой они создавались.

Если мастер содержит экран типа Complete, этот экран должен отображаться по­сле того, как пользователь щелкнет кнопку Finish и будет выполнена завершающая операция мастера. Если что-то пойдет не так, придется либо отменить переход, что­бы предотвратить вывод Сотрletе-экрана, либо адаптировать его пользовательский интерфейс, чтобы на данном экране выводилось сообщение об ошибке. Какое из двух решений выбрать, зависит от реализуемой вами операции. Если она может за­вершиться как успехом, так и неудачей, стоит предоставить мастеру возможность выполнить переход к заключительной странице и вывести на ней сообщение о не­удачном завершении. Когда же нет сомнений, что эта операция обязательно должна завершится успешно (если только пользователь сам не откажется от ее выполнения), то переход осуществлять не следует. В таком случае имеет смысл сообщить поль­зователю о произошедшем, предоставив ему возможность задать другие установки и повторить операцию.

4. Порядок выполнения работы

Упражнение 1

Создание Web-формы с элементом управления Wizard

В этом упражнении вы создадите четырехшаговую анкету, используя элемент управления Wizard

Вы должны обеспечить следующие поля для реализации мастера:

Имя

Фамилия

Адрес

Город

Регион

Страна

Почтовый Код

Регистрация

Откройте веб-сайт, находящийся по адресу~\LabFiles\Starter\language\AdWorksWebSite.

Откройте страницу HR. aspx.

Добавте кнопку для добавления новых служащих в элемент управления Content с ID = PageContentPlaceHolder.

Установите для кнопки следующие свойства:

Attribute

Value

ID

btnAddEmployee

Text

Add a New Employee



Ваш код должен выглядеть следующим образом:

<asp:Button ID="btnAddEmployee" runat="server" Text="Add a New Employee" />

Создайте новый элемент управления Wizard.

С панели инструментов перетащите на веб-форму элемент управления Wizard  непосредственно ниже элемента управления btnAddEmployee Button. Установите для него следующие свойства:

Attribute

Value

ID

wizNewEmployee

DisplayCancelButton

true

HeaderText

Add New Employee

Visible

false

DisplaySideBar

true


Добавьте атрибут OnFinishButtonClick и установите его значение wizNewEmployee_Finish. Добавте атрибут 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

Добавьте атрибут OnClick кнопке btnAddEmployee объявите и устанавите значение btnAddEmployee_Click.

Ваш код должен выглядеть следующим образом:

<asp:Button ID="btnAddEmployee" runat="server" Text="Add a New Employee" OnClick=”btnAddEmployee_click” />



Создайте в программной части метод btnAddEmployee_Click, чтобы обработать событие и установите свойствоVisible элемента управления wizNewEmployee равное true.

Ваш код должен выглядеть следующим образом:

private void btnAddEmployee_Click(object sender,

       EventArgs e)

{

  wizNewEmployee. Visible = true;

}

Создайте шаблон шага 1 элемента управления Wizard.

Установите следующие свойства для элемента управления:WizardStep

Attribute

Value

ID

WizardStep1

Title

Personal Data


Добавьте  тег <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

WizardStep2

Title

Company Data


Чтобы выбрать менеджера работника, добавьте тэг < div > в WizardStep2, который будет содержать элементы управления типа Label с идентификатором lblReportsTo и типа DropDownList. Выберите элемент управления DropDownList и установите следующие свойства для элемента управления:

Attribute

Value

ID

ddlReportsTo

DataSourceID

Employees

DataTextField

Name

DataValueField

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. Добавьте WizardStep в wizNewEmployee. Установите следующие свойства для элемента управления:

Attribute

Value

ID

WizardstepComplete

StepType

Complete

Title

Insert Results


Добавьте тэг < 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.

В тэге < 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. Содержание отчета

В отчете должны быть представлены:

    Исходный код. Результат выполненной работы в виде скриншотов.