Разработка интерактивных сайтов с помощью Microsoft Visual Web Developer

Создание и редактирование страниц

Разбить на страницы
Показывать лекцию целиком

С Web-формами применяются как HTML-элементы управления, так и серверные элементы управления. В чем разница между ними? В сущности, серверные элементы управления — это надмножество HTML-элементов управления, обладающее более широкими возможностями. Даже для создания небольших приложений требуется использование нескольких элементов управления, поэтому важно понимать, как работает каждый из них. Кроме того, для многих элементов управления можно задать различную форму, цвет, положение на странице и другие свойства. Таким образом, они становятся элементами дизайна интерфейса Web приложения.

Изучив материал этого модуля, вы сможете:

  • размещать на WEB-страницах различные элементы управления, менять их свойства заданные по умолчанию.
  • Использовать методы и события, которые связаны с элементами управления.
  • Понимать программы, написанные на языке C Sharp
  • Обрабатывать значения, возвращаемые некоторыми элементами управления
  • Запускать приложения на выполнение и отлаживать их с помощью точек прерывания и пошагового выполнения.
  • Создавать собственные небольшие Web - приложения.
  • Тема 1. Элементы управления и их свойства

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

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

    Элементы управления TextBox

    Назначение элемента управления TextBox состоит в создании на Web-форме полей ввода текста. Оператор:

    <asp:TextBox ID="Name" runat="server"></asp:TextBox>

    создает на Web-форме поле ввода текста и назначает ему программный идентификатор "Name". Свойство Text можно использовать для декларативного добавления текста в TextBox, а также для чтения и изменения этого текста из серверного сценария. Следующий оператор создает TextBox, первоначально содержащий строку "Анатолий":

    <asp:TextBox ID="Name" runat="server" Text="Анатолий"> </asp:TextBox>

    А вот этот серверный сценарий считывает содержимое элемента управления TextBox:

    string name = Name.Text;

    Text —- это лишь одно из нескольких открытых свойств класса TextBox. Среди других — Rows и Columns, устанавливающие размеры TextBox, задавая число строк и столбцов, которые в нем могут отображаться; MaxLength, ограничивающее максимальное число символов, которые могут быть введены; Readonly, значение true которого запрещает изменение текста пользователем; Wrap, управляющее активизацией режима переноса строк в многострочном TextBox ; и TextMode, которое может быть равно SingleLine (по умолчанию) для создания однострочных полей, MultiLine для создания многострочных или Password для создания полей ввода пароля, которые вместо вводимых пользователем символов отображают звездочки или иной символ. Следующий оператор создает поле ввода пароля с именем "Password":

    <asp:TextBox ID="Password" runat="server" TextMode="Password">
    </asp:TextBox>

    Чтобы создать многострочное поле, установите TextMode в MultiLine, a Rows в число строк равное 10:

    <asp:TextBox ID="Comments" runat="server" Rows="10" TextMode="MultiLine">
    </asp:TextBox>

    Атрибут Rows игнорируется, если TextMode явно не установлено в MultiLine.

    События TextChanged и свойство AutoPostBack

    Если текст в поле TextBox изменился, то после возврата формы элемент управления генерирует событие TextChanged. Обработчик события задается атрибутом

    OnTextChanged тэга <asp:TextBox>:

    <asp:TextBox ID="Name" runat="server" OnTextChanged="Name_TextChanged">
    </asp:TextBox>
    
        protected void Name_TextChanged(object sender, EventArgs e)
        {
            // Имя изменилось, считать его из TextBox.
            string name = Name.Text;
        }

    События TextChanged генерируются только при возврате формы на сервер. По умолчанию элементы управления TextBox сами не инициируют возвраты формы и, таким образом, генерируют событие TextChanged, только если возврат формы был вызван другим элементом управления. Если же установить свойство AutoPostBack элемента управления TextBox в true, то возвраты формы будут происходить (и событие TextChanged генерироваться) в момент изменения текста в поле ввода:

    <asp:TextBox ID="Name" runat="server" OnTextChanged="Name_TextChanged" AutoPostBack="True">
    </asp:TextBox>

    В ответ на каждый символ, вводимый пользователем, элементы управления TextBox в режиме AutoPostBack генерируют события TextChanged только при потере фокуса ввода (т. е. в тот момент, когда пользователь переходит к другому элементу управления формы), происшедшей после изменения текста. И это правильно, так как страница, выполняющая возврат формы при вводе каждого символа, работала бы очень медленно

    Элементы управления Label

    Label — один из простейших, если не самый простой Web-элемент управления, — позволяет создавать на Web-формах программно управляемые надписи. Текст элемента управления доступен через свойство Text. Следующий оператор добавляет на Web-страницу строку "Привет":

    <asp:Label ID="Label_Hello" runat="server" Text="Привет">
    </asp:Label>

    Часто элементы управления Label применяют, чтобы зарезервировать место для информации, выводимой серверными сценариями. Следующий оператор объявляет пустой элемент управления Label с программным идентификатором "Output":

    <asp:Label ID="Output" runat="server">
    </asp:Label>

    А этот оператор серверного сценария помещает строку "Привет" в то место Web- страницы, где расположен элемент управления Label:

    Output.Text = "Привет";

    Используйте элемент управления Label, если нужно изменять текст на Web- странице из серверного сценария.

    Элементы управления HyperLink

    Добавляют к Web-формам гиперссылки и бывают двух типов: текстовые гиперссылки и гиперссылки-изображения. Следующий оператор создает гиперссылку, которая представляется на Web-странице в виде текстовой строки и ссылается на www.mail.ru

    <asp:HyperLink ID="HyperLink_Mail" runat="server" NavigateUrl="http://mail.ru" Text="Почта">
    </asp:HyperLink>

    Небольшое изменение превращает ее в гиперссылку-изображение:

    <asp:HyperLink ID="HyperLink_Mail" runat="server" NavigateUrl="http://mail.ru" ImageUrl="~/mail.gif">
    </asp:HyperLink>

    Обычно в тэге <asp:HyperLink> указывается либо атрибут Text, либо атрибут ImageUrl. Если же вы все-таки укажете оба, элемент управления будет использовать текст при отображении всплывающей подсказки. Класс Hyperlink предоставляет свойство Target, позволяющее управлять тем, как будет отображаться целевая Web-страница. Так, оператор:

    <asp:HyperLink ID="HyperLink_Mail" runat="server" NavigateUrl="http://mail.ru" Text="Почта" ImageUrl="~/mail.gif" Target="_blank">
    </asp:HyperLink>

    открывает страницу в новом окне браузера. Другим применением атрибута Target является открытие страниц в заданных окнах или фреймах. Как и Label, элементы управления HyperLink следует использовать, только когда вы собираетесь изменять свойства элемента управления динамически. Следующий код инициализирует целевой адрес гиперссылки во время загрузки страницы:

    <asp:HyperLink ID="HyperLink_Mail" runat="server" Text="Почта">
    </asp:HyperLink>
    
        protected void Page_Load(object sender, EventArgs e)
        {
            HyperLink_Mail.NavigateUrl = "http://mail.ru";
        }

    Одной из причин подобной инициализации элемента управления Hyperlink может быть выборка целевого URL из БД.

    Элементы управления Image

    Добавляют к Web-формам картинки, генерируя тэги <img>. Самые популярные свойства ImageImageUrl (определяет URL картинки, которая будет отображаться), ImageAlign (управляет выравниванием картинки) AlternateText (задает альтернативный текст для картинки). Альтернативный текст отображается вместо картинки в браузерах, которые работают в текстовом режиме. Следующий оператор объявляет элемент управления Image на Web-форме:

    <asp:Image ID="Image_Logo" runat="server" ImageUrl="~/Logo.gif" AlternateText="Логотип" />

    Элементы управления Image прекрасно подойдут для отображения картинок, чьи URL определяются во время выполнения, возможно, по результатам пользовательского ввода.

    Элементы управления CheckBox

    Создают на Web-формах поля флажков. Свойство Checked определяет, установлен ли флажок ( true ) или сброшен ( false ), a Text определяет текст, отображаемый рядом. Следующий оператор объявляет элемент управления CheckBox на Web-форме:

    <asp:CheckBox ID="Confirm" runat="server" Text="Подтвердите свой выбор" />

    А этот серверный сценарий определяет состояние флажка, когда форма возвращается на сервер:

    if (Confirm.Checked) {
    // Флажок установлен.
    }
    else {
    // Флажок сброшен.
    }

    В нестандартном случае, когда нужно поменять местами флажок и текст, обычно отображаемый правее, используйте атрибут TextAlign="Left" в тэге элемента управления. При установке и сбросе флажка элементы управления CheckBox генерируют события CheckedChanged. По умолчанию событие CheckedChanged не генерируется сразу же при щелчке флажка, но откладывается до возврата формы. Чтобы реагировать на изменения состояния флажка сразу, установите в true свойство AutoPostBack для принудительного возврата формы:

    <asp:CheckBox ID="Confirm" runat="server" 
    Text="Подтвердите свой выбор" AutoPostBack="True" OnCheckedChanged="Confirm_CheckedChanged" />
    
        protected void Confirm_CheckedChanged(object sender, EventArgs e)
        {
            // Флажок только что установлен или сброшен.
            // Выполнить нужные действия.
        }

    Не устанавливайте AutoPostBack в true в отсутствие реальной необходимости немедленно обрабатывать события CheckedChanged. Одним из случаев, когда это действительно нужно, является динамическое изменение содержимого страницы при всяком изменении состояния флажка

    Элементы управления RadioButton

    Создают на Web-формах кнопки-переключатели, которые отображают список взаимоисключающих вариантов. Щелчок такой кнопки включает ее, одновременно отключая остальные кнопки в группе. RadioButton является производным от CheckBox и, таким образом, поддерживает те же свойства и события. Кроме того, он имеет дополнительное свойство GroupName для указания группы, к которой относится переключатель. В следующем примере объявляется пять элементов управления RadioButton, разделенных на две группы: из 3 и из 2 кнопок. Свойство RadioButton.Checked включает первую кнопку каждой группы:

    <asp:RadioButton ID="Green" runat="server" GroupName="Color" Text="Зеленый" Checked="True" /><br />
    <asp:RadioButton ID="Red" runat="server" GroupName=" Color" Text="Красный" /><br />
    <asp:RadioButton ID="Blue" runat="server" GroupName="Color" Text="Синий" />
    
    <asp:RadioButton ID="Circle" runat="server" GroupName="Shape" Text="Круг" Checked="True" /><br />
    <asp:RadioButton ID="Square" runat="server" GroupName="Shape" Text="Квадрат" />

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

    Чтобы в серверном сценарии определить, какой переключатель из группы был включен, нужно проверить значение свойства Checked у каждой кнопки группы. Удобнее для добавления переключателей к Web-странице использовать RadioButtonList. Его свойство Selectedlndex соответствует включенной кнопке. RadioButtonList также упрощает задачу выравнивания кнопок-переключателей на странице.

    Элементы управления Table

    Код для задания элемента управления Table

    <asp:Table ID="MyTable" runat="server">
        <asp:TableRow runat="server">
            <asp:TableCell runat="server">Row 1, Column 1</asp:TableCell>
            <asp:TableCell runat="server">Row 1, Column 2</asp:TableCell>
        </asp:TableRow>
        <asp:TableRow runat="server">
            <asp:TableCell runat="server">Row 2, Column 1</asp:TableCell>
            <asp:TableCell runat="server">Row 2, Column 2</asp:TableCell>
        </asp:TableRow>
    </asp:Table>

    Элементы управления Table полезны, когда содержимое таблицы нужно изменять динамически. Например, в следующем серверном сценарии изменяется текст во всех ячейках таблицы:

    MyTable.Rows[0].Cells[0].Text = "Cell 1";
    MyTable.Rows[0].Cells[1].Text = "Cell 2";
    MyTable.Rows[1].Cells[0].Text = "Cell 3";
    MyTable.Rows[1].Cells[1].Text = "Cell 4";

    А этот сценарий создает во время исполнения всю таблицу:

    <asp:Table ID="My_Table" runat="server">
    </asp:Table>
    
    for (int i = 0; i < 2; i++)
    {
        TableRow row = new TableRow();
        for (int j = 0; j < 2; j++)
        {
            TableCell cell = new TableCell();
            cell.Text = String.Format("Row {0}, Column {1}", i + 1, j + 1);
            row.Cells.Add(cell);
        }
        My_Table.Rows.Add(row);
    }

    Эти сценарии работают благодаря тому, что строки, содержащиеся в объекте Table, доступны через свойство Rows. Каждая строка набора Rows — это экземпляр класса TableRow. Внутри строки каждая ячейка представлена объектом TableCell, доступ к которому осуществляется посредством набора Cells объекта-строки. Вызов Add для набора Rows или Cells позволяет программно добавить строку к таблице или ячейку к строке.

    По умолчанию рамки элементов управления Table невидимы. Изменить это можно, установив свойство GridLines в Horizontal, Vertical или Both. Другие свойства TableCellPadding и Cellspacing — как и одноименные HTML-атрибуты, управляют промежутками внутри ячеек, a BacklmageUrl задает фоновую картинку. Таблицы часто используются Web-страницами для отображения цветного фона. Изменить цвет фона для Table позволяет его свойство BackColor, унаследованное от WebControl.

    Элементы управления Panel

    Служат контейнерами для других элементов управления. Одно из применений элементов управления Panelуправление видимостью группы элементов управления. Следующая Web-форма то отображает, то скрывает 4 элемента управления Label, устанавливая свойство Visible элемента управления Panel в true или false при всяком щелчке флажка. Обратите внимание на атрибут AutoPostBack="True" в тэге

    <asp:Panel ID="MyPanel" runat="server" Height="50px" Width="125px">
    <asp:Label ID="surname" runat="server" Text="Иванов"></asp:Label> <br />
    <asp:Label ID="name" runat="server" Text="Иван"></asp:Label><br />
    </asp:Panel>
    <asp:CheckBox ID="Toggle" runat="server" AutoPostBack="True" 
        OnCheckedChanged="Toggle_CheckedChanged" Text="Показать надписи" />
    
        protected void Toggle_CheckedChanged(object sender, EventArgs e)
        {
            MyPanel.Visible = Toggle.Checked;
        }

    Кнопки

    Семейство Web-элементов управления включает три типа кнопок: Button, LinkButton и ImageButton. Все три имеют общее функциональное назначение: возврат содержащей их формы на сервер. Отличия: Button выглядит как командная кнопка, LinkButton — как гиперссылка, a ImageButton отображает заданную картинку. Практически на любой Web-форме есть одна или несколько кнопок, с помощью которых пользователь может отправить форму на сервер. Ниже приведены примеры объявления экземпляров кнопок каждого типа:

    <asp:Button ID="Button1" runat="server" Text="Кнопка" OnClick="Button1_Click"/>
    
    <asp:LinkButton ID="LinkButton1" runat="server" Text="Кнопка-сылка"> </asp:LinkButton>
    
    <asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/Logo.gif" 
      AlternateText="Кнопка изображение" OnClick="ImageButton1_Click"/>

    Свойство Text задает текст, отображаемый поверх элемента управления Button или LinkButton. ImageUrl задает картинку, отображаемую элементом управления LinkButton. Все типы кнопок генерируют по щелчку два вида событий: Click и Command. Атрибут OnClick в тэге элемента управления связывает с кнопкой обработчик Click. Обработчики Click для Button и LinkButton имеют такой прототип:

    protected void Button1_Click(object sender, EventArgs e)
    {
    // Здесь выполняется обработка события,
    }

    А прототип обработчиков Click для элементов ImageButton отличается:

    protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
     {
      // Получить координаты щелчка,
      int x = e.X;
      int у = e.Y;
     }

    Объект ImageClickEventArgs, передаваемый обработчику Click объекта ImageButton, содержит открытые поля X и Y, указывающие положение указателя мыши в момент щелчка. X и Y измеряются в пикселах и соответствуют расстоянию от левого верхнего угла картинки.

    Списки

    В семейство элементов управления со списками входят 4 члена: ListBox, DropDownList, CheckBoxList и RadioButtonList. У них две общие характеристики: все они произведены от System.Web.UIWebControlsListControl и предназначены для отображения списков. Элементы управления ListBox и DropDownList содержат текстовые строки, которые могут быть выбраны пользователем. Оба преобразуются в HTML- теги <select>. CheckBoxList и RadioButtonList отображают массивы флажков и переключателей и преобразуются в тэги <input type=" checkbox" > и <input type="radio"> соответственно. Тэги <input> могут содержаться в HTML-таблице для выравнивания. Элементы списков представляются экземплярами класса Listltem, которые объявляются тэгами <asp:Listltem>. Listltem содержит текстовые свойства Text и Value. Text — это текст элемента списка; Value — произвольная строка, связанная с этим пунктом списка. Listltem также имеет свойство Selected булевого типа указывающее, выбран ли данный пункт. Следующие операторы объявляют ListBox, содержащий 4 элемента, и выбирают второй элемент:

    <asp:ListBox ID="MyListBox" runat="server">
           <asp:ListItem Text="Волга"></asp:ListItem>
           <asp:ListItem Text="Жигули" Selected="True"></asp:ListItem>
           <asp:ListItem Text="Москвич"></asp:ListItem>
           <asp:ListItem Text="Запорожец"></asp:ListItem>
       </asp:ListBox>

    Небольшое изменение кода создает вместо ListBox элемент управления DropDownList:

    <asp:DropDownList ID="MyDropDownList" runat="server">
      <asp:ListItem Text="Волга"></asp:ListItem>
      <asp:ListItem Text="Жигули" Selected="True"></asp:ListItem>
      <asp:ListItem Text="Москвич"></asp:ListItem>
      <asp:ListItem Text="Запорожец"></asp:ListItem>
    </asp:DropDownList>nbsp;</div>

    В ListBox или DropDownList свойство Selected объекта Listltem определяет, выбран ли данный элемент ( true ) или нет ( false ). В CheckBoxList или RadioButtonList то же свойство определяет, включен ли данный элемент. После возврата формы серверному сценарию не надо проверять каждый элемент списка, чтобы определить выбранный. Элементы управления со списками наследуют от базового класса ListControl свойства Selectedlndex и Selectedltem. Таким образом, сценарий может определить, какая кнопка-переключатель выбрана, считывая ее индекс (индексы начинаются с 0):

    int Index = MyRadioButtonList.SelectedIndex;

    Для элементов управления CheckBoxList свойства Selectedlndex и Selectedltem не столь интересны, так как может быть установлено более одного флажка из списка, но для других списков они крайне полезны. При изменении выбора, т. е. при выборе нового элемента ListBox и DropDownList или по щелчку кнопки в CheckBoxList и RadioButtonList элементы управления со списками генерируют событие SelectedlndexChanged. По умолчанию событие не генерируется, пока какое-либо иное событие не вызовет возврат формы. Однако все списки наследуют от ListControl свойство AutoPostBack, которое можно установить в true, чтобы события SelectedlndexChanged генерировались немедленно.

    Элементы управления DropDownList

    Отображают элементы в выпадающем списке, напоминающем поле со списком в Windows. Классический пример применения элемента управления DropDoumList - отображение списка семи базовых цветов. Следующий код создает такой список и отображает выбор пользователя на Web-странице:

    <asp:DropDownList ID="ColorList" runat="server">
        <asp:ListItem Text="Красный"></asp:ListItem>
        <asp:ListItem Text="Оранжевый"></asp:ListItem>
        <asp:ListItem Text="Желтый"></asp:ListItem>
        <asp:ListItem Text="Зеленый"></asp:ListItem>
        <asp:ListItem Text="Голубой"></asp:ListItem>
        <asp:ListItem Text="Синий"></asp:ListItem>
        <asp:ListItem Text="Фиолетовый"></asp:ListItem>
    </asp:DropDownList>
    <asp:Button ID="Select_Color" runat="server" OnClick="Select_Color_Click"  Text="Выбери цвет" />
    <asp:TextBox ID="Color" runat="server"></asp:TextBox>
    
        protected void Select_Color_Click(object sender, EventArgs e)
        {
            Color.Text = ColorList.SelectedItem.Text;
        }

    Элементы управления ListBox

    Похожи на элементы управления DropDownList, но отображают свои элементы в статичном, а не в выпадающем списке. Вот как создается элемент управления ListBox с перечнем семи базовых цветов, а выбор пользователя отображается на Web- странице:

    <asp: ListBox ID="ColorList" runat="server" Rows="7" >
        <asp:ListItem Text="Красный"></asp:ListItem>
        <asp:ListItem Text="Оранжевый"></asp:ListItem>
        <asp:ListItem Text="Желтый"></asp:ListItem>
        <asp:ListItem Text="Зеленый"></asp:ListItem>
        <asp:ListItem Text="Голубой"></asp:ListItem>
        <asp:ListItem Text="Синий"></asp:ListItem>
        <asp:ListItem Text="Фиолетовый"></asp:ListItem>
    </asp: ListBox>
    <asp:Button ID="Select_Color" runat="server" OnClick="Select_Color_Click"  Text="Выбери цвет" />
    <asp:TextBox ID="Color" runat="server"></asp:TextBox>
    
        protected void Select_Color_Click(object sender, EventArgs e)
        {
            Color.Text = ColorList.SelectedItem.Text;
        }

    По умолчанию размеры ListBox устанавливаются так, что одновременно видны только 4 пункта списка. Атрибут Rows в показанном выше тэге <asp:ListBox> увеличивает высоту списка до 7 элементов.

    Единственным функциональным различием между ListBox и DropDownList является поддержка множественного выбора первым из них. Атрибут SelectionMode="Multiple" в тэге элемента управления создает ListBox с множественным выбором:

    <asp:ListBox ID="ColorList" runat="server" Rows="7" SelectionMode="Multiple">

    К сожалению, в классе ListBox нет открытого метода или свойства для получения индексов элементов, выбранных в списке с множественным выбором. Чтобы определить, какие элементы были выбраны, вам придется перебрать все элементы списка по одному, проверяя значение свойства Selected. Следующий метод принимает ссылку на ListBox как входной параметр и возвращает массив целых чисел, содержащий индексы всех выбранных элементов, начиная с нуля;

    int[] GetSelectedlndices(ListBox lb)
      {
      ArrayList a = new ArrayList();
      for (int i=0; i<lb.Items.Count; i++)
          {
          if (lb.Items[i].Selected)
            a.Add(i);
          }
      int [] indices = new int[a.Count];
      a.CopyTo (indices);
      return indices;
      }

    Используя показанный выше метод GetSelectedlndices, оператор:

    int[ ] indices = GetSelectedlndices(ColorList) ;

    определяет полный список элементов, отобранных в списке с множественным выбором "ColorList".

    Элементы управления CheckBoxList

    Создают массивы флажков. Следующий оператор отображает 4 флажка, расположенные по вертикали:

    <asp:CheckBoxList ID="Auto_List" runat="server">
    <asp:ListItem Text="Волга"></asp:ListItem>
    <asp:ListItem Text="Жигули"></asp:ListItem>
    <asp:ListItem Text="Москвич"></asp:ListItem>
    <asp:ListItem Text="Запорожец"></asp:ListItem>
    </asp:CheckBoxList>

    Чтобы в серверном сценарии определить, установлен ли данный флажок, обратитесь к значению его свойства Selected:

    if (Auto_List.Items[2].Selected)
    {
    // Флажок установлен.
    }
    else
    {
    // Флажок сброшен.
    }

    Элементы управления RadioButtonList

    Элемент управления RadioButtonList упрощает создание групп переключателей и определение выбранного переключателя. Операторы:

    <asp:RadioButtonList ID="Auto_List" runat="server">
           <asp:ListItem Text="Волга" Selected="True"></asp:ListItem>
           <asp:ListItem Text="Жигули"></asp:ListItem>
           <asp:ListItem Text="Москвич"></asp:ListItem>
           <asp:ListItem Text="Запорожец"></asp:ListItem>
       </asp:RadioButtonList >

    создают столбец переключателей и включают первый из них. Чтобы определить, какой переключатель выбран пользователем, серверный сценарий может применить RadioButtonList, Selectedlndex.

    int index = Auto_List.SelectedIndex;

    Тема 2.Работа с кодом C Sharp

    При создании Web страницы, например, Default.aspx, одновременно создается и файл Default.aspx.cs или Default.aspx.vb, в котором могут размещаться фрагменты кода на языке C Sharp или VB соответственно. Эти фрагменты позволяют обрабатывать значения возвращаемые элементами управления. В дальнейшем будем ориентироваться на использование языка C Sharp, поэтому кратко рассмотрим основные типы данных и операторы этого языка.

    В C Sharp используются следующие типы данных:

  • int - значениями этого типа являются целые числа
  • char - значениями этого типа являются элементы конечного упорядоченного множества символов. Каждому символу ставится в соответствие число, которое называется кодом символа. Для кодировки используется код ASCii (American Standard Code for international interchange)
  • string - значениями этого типа являются строки символов
  • bool - тип bool называется логическим. Его величины могут принимать значения true (истина) и false (ложь).
  • float (вещественный) и double (вещественный с двойной точностью). Внутреннее представление вещественного числа состоит из 2 частей: мантиссы и порядка. Мантисса – это численное значение со знаком, порядок – это целое со знаком, определяющее значимость мантиссы.
  • Переменной в C Sharp называется именованная область памяти, в которой хранятся данные определенного типа. У переменной есть имя и значение. Имя служит для обращения к области памяти, в которой хранится значение. Перед использованием любая переменная должна быть описана, например, так:

    int a; 
    float x;

    При описании можно присвоить переменной начальное значение (инициализация):

    int   a = 10;
    float b = 20.5;

    Из констант, переменных, разделителей и знаков операций можно конструировать выражения. Каждое выражение представляет собой правило вычисления нового значения. Если выражение формирует целое или вещественное число, то оно называется арифметическим. Пара арифметических выражений, объединенная операцией сравнения, называется отношением.

    a+b+64  // арифметическое выражение
    (c-4) > (d*e)  // отношение

    В C Sharp имеются следующие типы операторов:

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

    i++;
    a += 2;
    x = a+b;

    К составным операторам относят собственно составные операторы и блоки. В обоих случаях это последовательность операторов, заключенная в фигурные скобки. Блок отличается от составного оператора наличием определений в теле блока.

    {
        n++;
        summa += n;
      }
      {
        int n = 0;
        n++; 
        summa += n;
      }

    Условный оператор имеет полную и сокращенную форму.

    if (выражение-условие) оператор1;      // сокращенная форма
    if (выражение-условие) оператор1; else оператор2;  // полная форма

    Если значение выражения-условия истинно, то выполняется оператор1, иначе выполняется оператор2

    Оператор выбора позволяет сделать множественный выбор.

    switch (выражение)
      {
        case константа1: оператор1;break;
        case константа2: оператор2; break;
        . . . . . . . . . . . 
        [default: операторы;]
      }

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

    Если значение выражения, записанного после switch, не совпало ни с одной константой, то выполняются операторы, которые следуют за меткой default.

    Цикл с предусловием

    while (выражение-условие)
      оператор;

    Если выражение-условие истинно, то тело цикла выполняется до тех пор, пока выражение-условие не станет ложным.

    while (a!=0)
      {
        a= Convert.ToInt16(Console.ReadLine()); 
        s+=a;
      }

    Цикл с постусловием

    do
      оператор;
      while (выражение-условие);

    Тело цикла выполняется до тех пор, пока выражение-условие истинно.

    do
      {
        a= Convert.ToInt16(Console.ReadLine());
        s+=a;
      }
      while(a!=0);

    Цикл с параметром

    for (выражение_1;выражение-условие;выражение_3)
      оператор;

    Выражение_1 – задает начальные условия для цикла (инициализация).

    Выражение-условие определяет условие выполнения цикла, если оно не равно 0, цикл выполняется, а затем вычисляется значение выражения_3.

    Выражение_3 – задает изменение параметра цикла или других переменных (коррекция).

    Выражение_1 и выражение_3 могут состоять из нескольких выражений, разделенных запятыми. Любое выражение может отсутствовать, но разделяющие их " ; " должны быть обязательно.

    Тема 3. Запуск и отладка проекта

    Запустить проект в VWD 2005 EE можно одним из следующих способов; щелкнуть кнопку Start на панели инструментов, выбрать из меню Debug команду Start или нажать клавишу F5. После запуска проекта VWD 2005 EE компонует его файлы, показывая в окне Error List сообщения об ошибках, если таковые возникнут (рис. 5.1).

    (рис 5.1) Сообщения об ошибках, возникших при компоновке проекта

    Дважды щелкнув описание ошибки в окне Error List, вы быстро найдете строку с ошибкой, чтобы исправить ее.

    Если во время компоновки ошибки не обнаружены, VWD 2005 EE запускает Internet Explorer и открывает в нем начальную страницу Web-приложения. Если при исполнении приложения в режиме отладки возникает ошибка. VWD 2005 EE показывает в браузере соответствующее сообщение. (рис. 5.2).

    (рис 5.2) Сообщение об ошибке, возникшей при выполнении проекта

    Дальше можно выполнить одно из следующих действий:

  • если причина ошибки известна, стоит остановить приложение, закрыв окно браузера и вернуться в VWD 2005 EE, чтобы исправить ошибку;
  • если причина ошибки неизвестна, следует щелкнуть кнопку Back (Назад) в браузере и переключиться в VWD 2005 EE, чтобы установить в коде точку прерывания перед предполагаемым местом возникновения ошибки. Затем, переключившись обратно в браузер, попробуйте еще раз выполнить действие, вызывавшее ошибку. Встретив точку прерывания, VWD 2005 EE остановит исполнение приложения. Далее путем пошагового исполнения вы локализуете ошибку.
  • Установка точки прерывания позволяет остановить исполнение проекта перед некоторой строкой кода. Встретив при исполнении проекта строку с точкой прерывания, VWD 2005 EE остановит приложение перед этой строкой и откроет ее в окне Code Editor, выделив, как показано на рис. 5.3. Чтобы установить точку прерывания, щелкните мышкой по серому полю слева от строки, перед которой нужно остановить исполнение программы, либо выделите эту строку и нажмите F9.

    (рис 5.3) Проект, остановленный перед точкой прерывания

    После останова приложения перед точкой прерывания стоит просмотреть значения активных переменных, наводя на них указатель мыши или воспользоваться вкладкой Local. Для отслеживания и просмотра значений переменных сложного типа, следует добавить эти переменные в окно Watch, показанное на рис. 5.4

    (рис 5.4) Окно Watch

    Чтобы сделать это, выделите переменную (объект) и перетащите ее в окно Watch. Для просмотра значений вложенных элементов (например, элементов массива или свойств объекта) щелкните знак "+" справа от сложного элемента в окне Watch.

    Чтобы возобновить исполнение приложения, остановленного перед точкой прерывания, щелкните кнопку Continue на панели инструментов либо нажмите F5.

    Можно также исполнять приложение построчно, нажимая F10 или F11.

    F10 заставляет при вызове процедуры исполнить ее как одну команду. Другими словами, процедура исполняется без захода в нее ( step over ), после чего исполнение останавливается на следующей после вызова этой процедуры строке. Нажатие клавиши F11 вызывает исполнение процедуры с заходом в нее ( step in ), при этом исполнение останавливается на первой строке вызванной процедуры

    Страницы:

    С Web-формами применяются как HTML-элементы управления, так и серверные элементы управления. В чем разница между ними? В сущности, серверные элементы управления — это надмножество HTML-элементов управления, обладающее более широкими возможностями. Даже для создания небольших приложений требуется использование нескольких элементов управления, поэтому важно понимать, как работает каждый из них. Кроме того, для многих элементов управления можно задать различную форму, цвет, положение на странице и другие свойства. Таким образом, они становятся элементами дизайна интерфейса Web приложения.

    Изучив материал этого модуля, вы сможете:

  • размещать на WEB-страницах различные элементы управления, менять их свойства заданные по умолчанию.
  • Использовать методы и события, которые связаны с элементами управления.
  • Понимать программы, написанные на языке C Sharp
  • Обрабатывать значения, возвращаемые некоторыми элементами управления
  • Запускать приложения на выполнение и отлаживать их с помощью точек прерывания и пошагового выполнения.
  • Создавать собственные небольшие Web - приложения.
  • Тема 1. Элементы управления и их свойства

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

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

    Элементы управления TextBox

    Назначение элемента управления TextBox состоит в создании на Web-форме полей ввода текста. Оператор:

    <asp:TextBox ID="Name" runat="server"></asp:TextBox>

    создает на Web-форме поле ввода текста и назначает ему программный идентификатор "Name". Свойство Text можно использовать для декларативного добавления текста в TextBox, а также для чтения и изменения этого текста из серверного сценария. Следующий оператор создает TextBox, первоначально содержащий строку "Анатолий":

    <asp:TextBox ID="Name" runat="server" Text="Анатолий"> </asp:TextBox>

    А вот этот серверный сценарий считывает содержимое элемента управления TextBox:

    string name = Name.Text;

    Text —- это лишь одно из нескольких открытых свойств класса TextBox. Среди других — Rows и Columns, устанавливающие размеры TextBox, задавая число строк и столбцов, которые в нем могут отображаться; MaxLength, ограничивающее максимальное число символов, которые могут быть введены; Readonly, значение true которого запрещает изменение текста пользователем; Wrap, управляющее активизацией режима переноса строк в многострочном TextBox ; и TextMode, которое может быть равно SingleLine (по умолчанию) для создания однострочных полей, MultiLine для создания многострочных или Password для создания полей ввода пароля, которые вместо вводимых пользователем символов отображают звездочки или иной символ. Следующий оператор создает поле ввода пароля с именем "Password":

    <asp:TextBox ID="Password" runat="server" TextMode="Password">
    </asp:TextBox>

    Чтобы создать многострочное поле, установите TextMode в MultiLine, a Rows в число строк равное 10:

    <asp:TextBox ID="Comments" runat="server" Rows="10" TextMode="MultiLine">
    </asp:TextBox>

    Атрибут Rows игнорируется, если TextMode явно не установлено в MultiLine.

    События TextChanged и свойство AutoPostBack

    Если текст в поле TextBox изменился, то после возврата формы элемент управления генерирует событие TextChanged. Обработчик события задается атрибутом

    OnTextChanged тэга <asp:TextBox>:

    <asp:TextBox ID="Name" runat="server" OnTextChanged="Name_TextChanged">
    </asp:TextBox>
    
        protected void Name_TextChanged(object sender, EventArgs e)
        {
            // Имя изменилось, считать его из TextBox.
            string name = Name.Text;
        }

    События TextChanged генерируются только при возврате формы на сервер. По умолчанию элементы управления TextBox сами не инициируют возвраты формы и, таким образом, генерируют событие TextChanged, только если возврат формы был вызван другим элементом управления. Если же установить свойство AutoPostBack элемента управления TextBox в true, то возвраты формы будут происходить (и событие TextChanged генерироваться) в момент изменения текста в поле ввода:

    <asp:TextBox ID="Name" runat="server" OnTextChanged="Name_TextChanged" AutoPostBack="True">
    </asp:TextBox>

    В ответ на каждый символ, вводимый пользователем, элементы управления TextBox в режиме AutoPostBack генерируют события TextChanged только при потере фокуса ввода (т. е. в тот момент, когда пользователь переходит к другому элементу управления формы), происшедшей после изменения текста. И это правильно, так как страница, выполняющая возврат формы при вводе каждого символа, работала бы очень медленно

    Элементы управления Label

    Label — один из простейших, если не самый простой Web-элемент управления, — позволяет создавать на Web-формах программно управляемые надписи. Текст элемента управления доступен через свойство Text. Следующий оператор добавляет на Web-страницу строку "Привет":

    <asp:Label ID="Label_Hello" runat="server" Text="Привет">
    </asp:Label>

    Часто элементы управления Label применяют, чтобы зарезервировать место для информации, выводимой серверными сценариями. Следующий оператор объявляет пустой элемент управления Label с программным идентификатором "Output":

    <asp:Label ID="Output" runat="server">
    </asp:Label>

    А этот оператор серверного сценария помещает строку "Привет" в то место Web- страницы, где расположен элемент управления Label:

    Output.Text = "Привет";

    Используйте элемент управления Label, если нужно изменять текст на Web- странице из серверного сценария.

    Элементы управления HyperLink

    Добавляют к Web-формам гиперссылки и бывают двух типов: текстовые гиперссылки и гиперссылки-изображения. Следующий оператор создает гиперссылку, которая представляется на Web-странице в виде текстовой строки и ссылается на www.mail.ru

    <asp:HyperLink ID="HyperLink_Mail" runat="server" NavigateUrl="http://mail.ru" Text="Почта">
    </asp:HyperLink>

    Небольшое изменение превращает ее в гиперссылку-изображение:

    <asp:HyperLink ID="HyperLink_Mail" runat="server" NavigateUrl="http://mail.ru" ImageUrl="~/mail.gif">
    </asp:HyperLink>

    Обычно в тэге <asp:HyperLink> указывается либо атрибут Text, либо атрибут ImageUrl. Если же вы все-таки укажете оба, элемент управления будет использовать текст при отображении всплывающей подсказки. Класс Hyperlink предоставляет свойство Target, позволяющее управлять тем, как будет отображаться целевая Web-страница. Так, оператор:

    <asp:HyperLink ID="HyperLink_Mail" runat="server" NavigateUrl="http://mail.ru" Text="Почта" ImageUrl="~/mail.gif" Target="_blank">
    </asp:HyperLink>

    открывает страницу в новом окне браузера. Другим применением атрибута Target является открытие страниц в заданных окнах или фреймах. Как и Label, элементы управления HyperLink следует использовать, только когда вы собираетесь изменять свойства элемента управления динамически. Следующий код инициализирует целевой адрес гиперссылки во время загрузки страницы:

    <asp:HyperLink ID="HyperLink_Mail" runat="server" Text="Почта">
    </asp:HyperLink>
    
        protected void Page_Load(object sender, EventArgs e)
        {
            HyperLink_Mail.NavigateUrl = "http://mail.ru";
        }

    Одной из причин подобной инициализации элемента управления Hyperlink может быть выборка целевого URL из БД.

    Элементы управления Image

    Добавляют к Web-формам картинки, генерируя тэги <img>. Самые популярные свойства ImageImageUrl (определяет URL картинки, которая будет отображаться), ImageAlign (управляет выравниванием картинки) AlternateText (задает альтернативный текст для картинки). Альтернативный текст отображается вместо картинки в браузерах, которые работают в текстовом режиме. Следующий оператор объявляет элемент управления Image на Web-форме:

    <asp:Image ID="Image_Logo" runat="server" ImageUrl="~/Logo.gif" AlternateText="Логотип" />

    Элементы управления Image прекрасно подойдут для отображения картинок, чьи URL определяются во время выполнения, возможно, по результатам пользовательского ввода.

    Элементы управления CheckBox

    Создают на Web-формах поля флажков. Свойство Checked определяет, установлен ли флажок ( true ) или сброшен ( false ), a Text определяет текст, отображаемый рядом. Следующий оператор объявляет элемент управления CheckBox на Web-форме:

    <asp:CheckBox ID="Confirm" runat="server" Text="Подтвердите свой выбор" />

    А этот серверный сценарий определяет состояние флажка, когда форма возвращается на сервер:

    if (Confirm.Checked) {
    // Флажок установлен.
    }
    else {
    // Флажок сброшен.
    }

    В нестандартном случае, когда нужно поменять местами флажок и текст, обычно отображаемый правее, используйте атрибут TextAlign="Left" в тэге элемента управления. При установке и сбросе флажка элементы управления CheckBox генерируют события CheckedChanged. По умолчанию событие CheckedChanged не генерируется сразу же при щелчке флажка, но откладывается до возврата формы. Чтобы реагировать на изменения состояния флажка сразу, установите в true свойство AutoPostBack для принудительного возврата формы:

    <asp:CheckBox ID="Confirm" runat="server" 
    Text="Подтвердите свой выбор" AutoPostBack="True" OnCheckedChanged="Confirm_CheckedChanged" />
    
        protected void Confirm_CheckedChanged(object sender, EventArgs e)
        {
            // Флажок только что установлен или сброшен.
            // Выполнить нужные действия.
        }

    Не устанавливайте AutoPostBack в true в отсутствие реальной необходимости немедленно обрабатывать события CheckedChanged. Одним из случаев, когда это действительно нужно, является динамическое изменение содержимого страницы при всяком изменении состояния флажка

    Элементы управления RadioButton

    Создают на Web-формах кнопки-переключатели, которые отображают список взаимоисключающих вариантов. Щелчок такой кнопки включает ее, одновременно отключая остальные кнопки в группе. RadioButton является производным от CheckBox и, таким образом, поддерживает те же свойства и события. Кроме того, он имеет дополнительное свойство GroupName для указания группы, к которой относится переключатель. В следующем примере объявляется пять элементов управления RadioButton, разделенных на две группы: из 3 и из 2 кнопок. Свойство RadioButton.Checked включает первую кнопку каждой группы:

    <asp:RadioButton ID="Green" runat="server" GroupName="Color" Text="Зеленый" Checked="True" /><br />
    <asp:RadioButton ID="Red" runat="server" GroupName=" Color" Text="Красный" /><br />
    <asp:RadioButton ID="Blue" runat="server" GroupName="Color" Text="Синий" />
    
    <asp:RadioButton ID="Circle" runat="server" GroupName="Shape" Text="Круг" Checked="True" /><br />
    <asp:RadioButton ID="Square" runat="server" GroupName="Shape" Text="Квадрат" />

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

    Чтобы в серверном сценарии определить, какой переключатель из группы был включен, нужно проверить значение свойства Checked у каждой кнопки группы. Удобнее для добавления переключателей к Web-странице использовать RadioButtonList. Его свойство Selectedlndex соответствует включенной кнопке. RadioButtonList также упрощает задачу выравнивания кнопок-переключателей на странице.

    Элементы управления Table

    Код для задания элемента управления Table

    <asp:Table ID="MyTable" runat="server">
        <asp:TableRow runat="server">
            <asp:TableCell runat="server">Row 1, Column 1</asp:TableCell>
            <asp:TableCell runat="server">Row 1, Column 2</asp:TableCell>
        </asp:TableRow>
        <asp:TableRow runat="server">
            <asp:TableCell runat="server">Row 2, Column 1</asp:TableCell>
            <asp:TableCell runat="server">Row 2, Column 2</asp:TableCell>
        </asp:TableRow>
    </asp:Table>

    Элементы управления Table полезны, когда содержимое таблицы нужно изменять динамически. Например, в следующем серверном сценарии изменяется текст во всех ячейках таблицы:

    MyTable.Rows[0].Cells[0].Text = "Cell 1";
    MyTable.Rows[0].Cells[1].Text = "Cell 2";
    MyTable.Rows[1].Cells[0].Text = "Cell 3";
    MyTable.Rows[1].Cells[1].Text = "Cell 4";

    А этот сценарий создает во время исполнения всю таблицу:

    <asp:Table ID="My_Table" runat="server">
    </asp:Table>
    
    for (int i = 0; i < 2; i++)
    {
        TableRow row = new TableRow();
        for (int j = 0; j < 2; j++)
        {
            TableCell cell = new TableCell();
            cell.Text = String.Format("Row {0}, Column {1}", i + 1, j + 1);
            row.Cells.Add(cell);
        }
        My_Table.Rows.Add(row);
    }

    Эти сценарии работают благодаря тому, что строки, содержащиеся в объекте Table, доступны через свойство Rows. Каждая строка набора Rows — это экземпляр класса TableRow. Внутри строки каждая ячейка представлена объектом TableCell, доступ к которому осуществляется посредством набора Cells объекта-строки. Вызов Add для набора Rows или Cells позволяет программно добавить строку к таблице или ячейку к строке.

    По умолчанию рамки элементов управления Table невидимы. Изменить это можно, установив свойство GridLines в Horizontal, Vertical или Both. Другие свойства TableCellPadding и Cellspacing — как и одноименные HTML-атрибуты, управляют промежутками внутри ячеек, a BacklmageUrl задает фоновую картинку. Таблицы часто используются Web-страницами для отображения цветного фона. Изменить цвет фона для Table позволяет его свойство BackColor, унаследованное от WebControl.

    Элементы управления Panel

    Служат контейнерами для других элементов управления. Одно из применений элементов управления Panelуправление видимостью группы элементов управления. Следующая Web-форма то отображает, то скрывает 4 элемента управления Label, устанавливая свойство Visible элемента управления Panel в true или false при всяком щелчке флажка. Обратите внимание на атрибут AutoPostBack="True" в тэге

    <asp:Panel ID="MyPanel" runat="server" Height="50px" Width="125px">
    <asp:Label ID="surname" runat="server" Text="Иванов"></asp:Label> <br />
    <asp:Label ID="name" runat="server" Text="Иван"></asp:Label><br />
    </asp:Panel>
    <asp:CheckBox ID="Toggle" runat="server" AutoPostBack="True" 
        OnCheckedChanged="Toggle_CheckedChanged" Text="Показать надписи" />
    
        protected void Toggle_CheckedChanged(object sender, EventArgs e)
        {
            MyPanel.Visible = Toggle.Checked;
        }

    Кнопки

    Семейство Web-элементов управления включает три типа кнопок: Button, LinkButton и ImageButton. Все три имеют общее функциональное назначение: возврат содержащей их формы на сервер. Отличия: Button выглядит как командная кнопка, LinkButton — как гиперссылка, a ImageButton отображает заданную картинку. Практически на любой Web-форме есть одна или несколько кнопок, с помощью которых пользователь может отправить форму на сервер. Ниже приведены примеры объявления экземпляров кнопок каждого типа:

    <asp:Button ID="Button1" runat="server" Text="Кнопка" OnClick="Button1_Click"/>
    
    <asp:LinkButton ID="LinkButton1" runat="server" Text="Кнопка-сылка"> </asp:LinkButton>
    
    <asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/Logo.gif" 
      AlternateText="Кнопка изображение" OnClick="ImageButton1_Click"/>

    Свойство Text задает текст, отображаемый поверх элемента управления Button или LinkButton. ImageUrl задает картинку, отображаемую элементом управления LinkButton. Все типы кнопок генерируют по щелчку два вида событий: Click и Command. Атрибут OnClick в тэге элемента управления связывает с кнопкой обработчик Click. Обработчики Click для Button и LinkButton имеют такой прототип:

    protected void Button1_Click(object sender, EventArgs e)
    {
    // Здесь выполняется обработка события,
    }

    А прототип обработчиков Click для элементов ImageButton отличается:

    protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
     {
      // Получить координаты щелчка,
      int x = e.X;
      int у = e.Y;
     }

    Объект ImageClickEventArgs, передаваемый обработчику Click объекта ImageButton, содержит открытые поля X и Y, указывающие положение указателя мыши в момент щелчка. X и Y измеряются в пикселах и соответствуют расстоянию от левого верхнего угла картинки.

    Списки

    В семейство элементов управления со списками входят 4 члена: ListBox, DropDownList, CheckBoxList и RadioButtonList. У них две общие характеристики: все они произведены от System.Web.UIWebControlsListControl и предназначены для отображения списков. Элементы управления ListBox и DropDownList содержат текстовые строки, которые могут быть выбраны пользователем. Оба преобразуются в HTML- теги <select>. CheckBoxList и RadioButtonList отображают массивы флажков и переключателей и преобразуются в тэги <input type=" checkbox" > и <input type="radio"> соответственно. Тэги <input> могут содержаться в HTML-таблице для выравнивания. Элементы списков представляются экземплярами класса Listltem, которые объявляются тэгами <asp:Listltem>. Listltem содержит текстовые свойства Text и Value. Text — это текст элемента списка; Value — произвольная строка, связанная с этим пунктом списка. Listltem также имеет свойство Selected булевого типа указывающее, выбран ли данный пункт. Следующие операторы объявляют ListBox, содержащий 4 элемента, и выбирают второй элемент:

    <asp:ListBox ID="MyListBox" runat="server">
           <asp:ListItem Text="Волга"></asp:ListItem>
           <asp:ListItem Text="Жигули" Selected="True"></asp:ListItem>
           <asp:ListItem Text="Москвич"></asp:ListItem>
           <asp:ListItem Text="Запорожец"></asp:ListItem>
       </asp:ListBox>

    Небольшое изменение кода создает вместо ListBox элемент управления DropDownList:

    <asp:DropDownList ID="MyDropDownList" runat="server">
      <asp:ListItem Text="Волга"></asp:ListItem>
      <asp:ListItem Text="Жигули" Selected="True"></asp:ListItem>
      <asp:ListItem Text="Москвич"></asp:ListItem>
      <asp:ListItem Text="Запорожец"></asp:ListItem>
    </asp:DropDownList>nbsp;</div>

    В ListBox или DropDownList свойство Selected объекта Listltem определяет, выбран ли данный элемент ( true ) или нет ( false ). В CheckBoxList или RadioButtonList то же свойство определяет, включен ли данный элемент. После возврата формы серверному сценарию не надо проверять каждый элемент списка, чтобы определить выбранный. Элементы управления со списками наследуют от базового класса ListControl свойства Selectedlndex и Selectedltem. Таким образом, сценарий может определить, какая кнопка-переключатель выбрана, считывая ее индекс (индексы начинаются с 0):

    int Index = MyRadioButtonList.SelectedIndex;

    Для элементов управления CheckBoxList свойства Selectedlndex и Selectedltem не столь интересны, так как может быть установлено более одного флажка из списка, но для других списков они крайне полезны. При изменении выбора, т. е. при выборе нового элемента ListBox и DropDownList или по щелчку кнопки в CheckBoxList и RadioButtonList элементы управления со списками генерируют событие SelectedlndexChanged. По умолчанию событие не генерируется, пока какое-либо иное событие не вызовет возврат формы. Однако все списки наследуют от ListControl свойство AutoPostBack, которое можно установить в true, чтобы события SelectedlndexChanged генерировались немедленно.

    Элементы управления DropDownList

    Отображают элементы в выпадающем списке, напоминающем поле со списком в Windows. Классический пример применения элемента управления DropDoumList - отображение списка семи базовых цветов. Следующий код создает такой список и отображает выбор пользователя на Web-странице:

    <asp:DropDownList ID="ColorList" runat="server">
        <asp:ListItem Text="Красный"></asp:ListItem>
        <asp:ListItem Text="Оранжевый"></asp:ListItem>
        <asp:ListItem Text="Желтый"></asp:ListItem>
        <asp:ListItem Text="Зеленый"></asp:ListItem>
        <asp:ListItem Text="Голубой"></asp:ListItem>
        <asp:ListItem Text="Синий"></asp:ListItem>
        <asp:ListItem Text="Фиолетовый"></asp:ListItem>
    </asp:DropDownList>
    <asp:Button ID="Select_Color" runat="server" OnClick="Select_Color_Click"  Text="Выбери цвет" />
    <asp:TextBox ID="Color" runat="server"></asp:TextBox>
    
        protected void Select_Color_Click(object sender, EventArgs e)
        {
            Color.Text = ColorList.SelectedItem.Text;
        }

    Элементы управления ListBox

    Похожи на элементы управления DropDownList, но отображают свои элементы в статичном, а не в выпадающем списке. Вот как создается элемент управления ListBox с перечнем семи базовых цветов, а выбор пользователя отображается на Web- странице:

    <asp: ListBox ID="ColorList" runat="server" Rows="7" >
        <asp:ListItem Text="Красный"></asp:ListItem>
        <asp:ListItem Text="Оранжевый"></asp:ListItem>
        <asp:ListItem Text="Желтый"></asp:ListItem>
        <asp:ListItem Text="Зеленый"></asp:ListItem>
        <asp:ListItem Text="Голубой"></asp:ListItem>
        <asp:ListItem Text="Синий"></asp:ListItem>
        <asp:ListItem Text="Фиолетовый"></asp:ListItem>
    </asp: ListBox>
    <asp:Button ID="Select_Color" runat="server" OnClick="Select_Color_Click"  Text="Выбери цвет" />
    <asp:TextBox ID="Color" runat="server"></asp:TextBox>
    
        protected void Select_Color_Click(object sender, EventArgs e)
        {
            Color.Text = ColorList.SelectedItem.Text;
        }

    По умолчанию размеры ListBox устанавливаются так, что одновременно видны только 4 пункта списка. Атрибут Rows в показанном выше тэге <asp:ListBox> увеличивает высоту списка до 7 элементов.

    Единственным функциональным различием между ListBox и DropDownList является поддержка множественного выбора первым из них. Атрибут SelectionMode="Multiple" в тэге элемента управления создает ListBox с множественным выбором:

    <asp:ListBox ID="ColorList" runat="server" Rows="7" SelectionMode="Multiple">

    К сожалению, в классе ListBox нет открытого метода или свойства для получения индексов элементов, выбранных в списке с множественным выбором. Чтобы определить, какие элементы были выбраны, вам придется перебрать все элементы списка по одному, проверяя значение свойства Selected. Следующий метод принимает ссылку на ListBox как входной параметр и возвращает массив целых чисел, содержащий индексы всех выбранных элементов, начиная с нуля;

    int[] GetSelectedlndices(ListBox lb)
      {
      ArrayList a = new ArrayList();
      for (int i=0; i<lb.Items.Count; i++)
          {
          if (lb.Items[i].Selected)
            a.Add(i);
          }
      int [] indices = new int[a.Count];
      a.CopyTo (indices);
      return indices;
      }

    Используя показанный выше метод GetSelectedlndices, оператор:

    int[ ] indices = GetSelectedlndices(ColorList) ;

    определяет полный список элементов, отобранных в списке с множественным выбором "ColorList".

    Элементы управления CheckBoxList

    Создают массивы флажков. Следующий оператор отображает 4 флажка, расположенные по вертикали:

    <asp:CheckBoxList ID="Auto_List" runat="server">
    <asp:ListItem Text="Волга"></asp:ListItem>
    <asp:ListItem Text="Жигули"></asp:ListItem>
    <asp:ListItem Text="Москвич"></asp:ListItem>
    <asp:ListItem Text="Запорожец"></asp:ListItem>
    </asp:CheckBoxList>

    Чтобы в серверном сценарии определить, установлен ли данный флажок, обратитесь к значению его свойства Selected:

    if (Auto_List.Items[2].Selected)
    {
    // Флажок установлен.
    }
    else
    {
    // Флажок сброшен.
    }

    Элементы управления RadioButtonList

    Элемент управления RadioButtonList упрощает создание групп переключателей и определение выбранного переключателя. Операторы:

    <asp:RadioButtonList ID="Auto_List" runat="server">
           <asp:ListItem Text="Волга" Selected="True"></asp:ListItem>
           <asp:ListItem Text="Жигули"></asp:ListItem>
           <asp:ListItem Text="Москвич"></asp:ListItem>
           <asp:ListItem Text="Запорожец"></asp:ListItem>
       </asp:RadioButtonList >

    создают столбец переключателей и включают первый из них. Чтобы определить, какой переключатель выбран пользователем, серверный сценарий может применить RadioButtonList, Selectedlndex.

    int index = Auto_List.SelectedIndex;

    Тема 2.Работа с кодом C Sharp

    При создании Web страницы, например, Default.aspx, одновременно создается и файл Default.aspx.cs или Default.aspx.vb, в котором могут размещаться фрагменты кода на языке C Sharp или VB соответственно. Эти фрагменты позволяют обрабатывать значения возвращаемые элементами управления. В дальнейшем будем ориентироваться на использование языка C Sharp, поэтому кратко рассмотрим основные типы данных и операторы этого языка.

    В C Sharp используются следующие типы данных:

  • int - значениями этого типа являются целые числа
  • char - значениями этого типа являются элементы конечного упорядоченного множества символов. Каждому символу ставится в соответствие число, которое называется кодом символа. Для кодировки используется код ASCii (American Standard Code for international interchange)
  • string - значениями этого типа являются строки символов
  • bool - тип bool называется логическим. Его величины могут принимать значения true (истина) и false (ложь).
  • float (вещественный) и double (вещественный с двойной точностью). Внутреннее представление вещественного числа состоит из 2 частей: мантиссы и порядка. Мантисса – это численное значение со знаком, порядок – это целое со знаком, определяющее значимость мантиссы.
  • Переменной в C Sharp называется именованная область памяти, в которой хранятся данные определенного типа. У переменной есть имя и значение. Имя служит для обращения к области памяти, в которой хранится значение. Перед использованием любая переменная должна быть описана, например, так:

    int a; 
    float x;

    При описании можно присвоить переменной начальное значение (инициализация):

    int   a = 10;
    float b = 20.5;

    Из констант, переменных, разделителей и знаков операций можно конструировать выражения. Каждое выражение представляет собой правило вычисления нового значения. Если выражение формирует целое или вещественное число, то оно называется арифметическим. Пара арифметических выражений, объединенная операцией сравнения, называется отношением.

    a+b+64  // арифметическое выражение
    (c-4) > (d*e)  // отношение

    В C Sharp имеются следующие типы операторов:

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

    i++;
    a += 2;
    x = a+b;

    К составным операторам относят собственно составные операторы и блоки. В обоих случаях это последовательность операторов, заключенная в фигурные скобки. Блок отличается от составного оператора наличием определений в теле блока.

    {
        n++;
        summa += n;
      }
      {
        int n = 0;
        n++; 
        summa += n;
      }

    Условный оператор имеет полную и сокращенную форму.

    if (выражение-условие) оператор1;      // сокращенная форма
    if (выражение-условие) оператор1; else оператор2;  // полная форма

    Если значение выражения-условия истинно, то выполняется оператор1, иначе выполняется оператор2

    Оператор выбора позволяет сделать множественный выбор.

    switch (выражение)
      {
        case константа1: оператор1;break;
        case константа2: оператор2; break;
        . . . . . . . . . . . 
        [default: операторы;]
      }

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

    Если значение выражения, записанного после switch, не совпало ни с одной константой, то выполняются операторы, которые следуют за меткой default.

    Цикл с предусловием

    while (выражение-условие)
      оператор;

    Если выражение-условие истинно, то тело цикла выполняется до тех пор, пока выражение-условие не станет ложным.

    while (a!=0)
      {
        a= Convert.ToInt16(Console.ReadLine()); 
        s+=a;
      }

    Цикл с постусловием

    do
      оператор;
      while (выражение-условие);

    Тело цикла выполняется до тех пор, пока выражение-условие истинно.

    do
      {
        a= Convert.ToInt16(Console.ReadLine());
        s+=a;
      }
      while(a!=0);

    Цикл с параметром

    for (выражение_1;выражение-условие;выражение_3)
      оператор;

    Выражение_1 – задает начальные условия для цикла (инициализация).

    Выражение-условие определяет условие выполнения цикла, если оно не равно 0, цикл выполняется, а затем вычисляется значение выражения_3.

    Выражение_3 – задает изменение параметра цикла или других переменных (коррекция).

    Выражение_1 и выражение_3 могут состоять из нескольких выражений, разделенных запятыми. Любое выражение может отсутствовать, но разделяющие их " ; " должны быть обязательно.

    Тема 3. Запуск и отладка проекта

    Запустить проект в VWD 2005 EE можно одним из следующих способов; щелкнуть кнопку Start на панели инструментов, выбрать из меню Debug команду Start или нажать клавишу F5. После запуска проекта VWD 2005 EE компонует его файлы, показывая в окне Error List сообщения об ошибках, если таковые возникнут (рис. 5.1).

    (рис 5.1) Сообщения об ошибках, возникших при компоновке проекта

    Дважды щелкнув описание ошибки в окне Error List, вы быстро найдете строку с ошибкой, чтобы исправить ее.

    Если во время компоновки ошибки не обнаружены, VWD 2005 EE запускает Internet Explorer и открывает в нем начальную страницу Web-приложения. Если при исполнении приложения в режиме отладки возникает ошибка. VWD 2005 EE показывает в браузере соответствующее сообщение. (рис. 5.2).

    (рис 5.2) Сообщение об ошибке, возникшей при выполнении проекта

    Дальше можно выполнить одно из следующих действий:

  • если причина ошибки известна, стоит остановить приложение, закрыв окно браузера и вернуться в VWD 2005 EE, чтобы исправить ошибку;
  • если причина ошибки неизвестна, следует щелкнуть кнопку Back (Назад) в браузере и переключиться в VWD 2005 EE, чтобы установить в коде точку прерывания перед предполагаемым местом возникновения ошибки. Затем, переключившись обратно в браузер, попробуйте еще раз выполнить действие, вызывавшее ошибку. Встретив точку прерывания, VWD 2005 EE остановит исполнение приложения. Далее путем пошагового исполнения вы локализуете ошибку.
  • Установка точки прерывания позволяет остановить исполнение проекта перед некоторой строкой кода. Встретив при исполнении проекта строку с точкой прерывания, VWD 2005 EE остановит приложение перед этой строкой и откроет ее в окне Code Editor, выделив, как показано на рис. 5.3. Чтобы установить точку прерывания, щелкните мышкой по серому полю слева от строки, перед которой нужно остановить исполнение программы, либо выделите эту строку и нажмите F9.

    (рис 5.3) Проект, остановленный перед точкой прерывания

    После останова приложения перед точкой прерывания стоит просмотреть значения активных переменных, наводя на них указатель мыши или воспользоваться вкладкой Local. Для отслеживания и просмотра значений переменных сложного типа, следует добавить эти переменные в окно Watch, показанное на рис. 5.4

    (рис 5.4) Окно Watch

    Чтобы сделать это, выделите переменную (объект) и перетащите ее в окно Watch. Для просмотра значений вложенных элементов (например, элементов массива или свойств объекта) щелкните знак "+" справа от сложного элемента в окне Watch.

    Чтобы возобновить исполнение приложения, остановленного перед точкой прерывания, щелкните кнопку Continue на панели инструментов либо нажмите F5.

    Можно также исполнять приложение построчно, нажимая F10 или F11.

    F10 заставляет при вызове процедуры исполнить ее как одну команду. Другими словами, процедура исполняется без захода в нее ( step over ), после чего исполнение останавливается на следующей после вызова этой процедуры строке. Нажатие клавиши F11 вызывает исполнение процедуры с заходом в нее ( step in ), при этом исполнение останавливается на первой строке вызванной процедуры

    Вернуться к учебному плану