Опубликован: 13.07.2010 | Доступ: свободный | Студентов: 889 / 20 | Оценка: 4.40 / 4.20 | Длительность: 77:34:00
Самостоятельная работа 3:

Управление HTML-элементами в ASP.NET

Упражнение 12. Элемент управления HTMLSelect

Элемент управления HTMLSelect позволяет программировать HTML-тег выпадающего списка <select> и встроенные в него теги пунктов списка <option>. Добавим страничку к нашему проекту, где продемонстрируем этот элемент.

  • Добавьте к проекту активную страницу Web Form с отделенным кодом и именем HTMLSelect.aspx. Сделайте страницу стартовой для удобства отладки
  • Настройте редактор Web-формы на абсолютное позиционирование добавляемых элементов пользовательского интерфейса. Для этого переведите страницу в режим редактирования Design и выполните команду Layout/Position/Auto-position Options. В появившемся окне включите верхний флажок "Change positioning ..." и удостовертесь, чтобы выпадающий список имел значение "Absolutely positioned"

  • В панели Toolbox откройте вкладку HTML и перенесите на форму компоненты, которые нужно расположить в соответствии с рисунком
  1. Контейнер Div с размещенным в нем текстом "Элемент управления HTMLSelect" заголовка страницы
  2. Компонент Input (Text) текстового поля с идентификатором id=optionTag
  3. Контейнер Div с размещенным в нем текстом "Новая опция:" для маркировки текстового поля optionTag
  4. Контейнер Div с размещенным в нем текстом "Результат" и идентификатором id=message для программного управления
  5. Контейнер Div с размещенным в нем текстом "Сообщения:" для маркировки контейнера message
  6. Компонент Select с идентификатором id=selectTag для программного управления
  7. Кнопку Input (Submit) с идентификатором id=AddOption для программного управления и Value="Добавить новую опцию"
  8. Кнопку Input (Submit) с идентификатором id=GetSelected для программного управления и Value="Показать выбор"
  9. Компонент Horizontal Rule
  • Скопируйте с предыдущей страницы таблицу с размещенными в ней ссылками для перехода и в панели свойств отредактируйте их так
<a href="HTMLInputText.aspx">Назад</a>
     <a href="HTMLTable.aspx">Вперед</a>
  • Разместите компоненты так, как показано на рисунке. Задайте для элементов управления, которые будут участвовать в программном управлении ( optionTag, selectTag, message, AddOption, GetSelected), атрибут runat="server" и проследите за появлением зеленых маркеров на элементах управления, превращенных в серверные

  • Создайте обработчики для кнопок AddOption, GetSelected и заполните их так
protected void Page_Load(object sender, EventArgs e)
    {
        selectTag.Items[0].Text = "Первая опция";
    }
    
    protected void AddOption_ServerClick(object sender, EventArgs e)
    {
        selectTag.Items.Add(optionTag.Value);
        int count = selectTag.Items.Count;
        message.InnerText = "В список добавлена " +
            count + " опция";
        selectTag.SelectedIndex = count - 1;// Сделать текущей
    }
    
    protected void GetSelected_ServerClick(object sender, EventArgs e)
    {
        message.InnerHtml = "Вы выбрали: ";
    
        for (int i = 0; i <= selectTag.Items.Count - 1; i++)
        {
            if (selectTag.Items[i].Selected)
                message.InnerHtml += selectTag.Items[i].Text;
        }
    }
Листинг 3.25. Обработчики в файле HTMLSelect.aspx.cs
  • Постройте приложение и проверьте его работоспособность

Как можно убедиться в ассоциированном файле по всплывающей подсказке при позиционировании курсора на объекте selectTag, элемент управления Select поддерживается библиотечным классом System.Web.UI.HtmlControls.HtmlSelect. В нашем случае экземпляром этого класса является объект с идентификатором selectTag. В этом объекте свойство Items, представляющее собой ссылку на экземпляр класса System.Web.UI.WebControls.ListItemCollection, содержит элементы списка и члены для управления этими элементами. Некоторые из этих членов приведены в таблице

Некоторые методы класса ListItemCollection свойства Items
Метод Описание
Add() Добавляет новый пункт в конец списка
Clear() Очищает список
Contains() Возвращает true, если список содержит заданный пункт
Count Свойство возвращает число пунктов в вписке
IndexOf() Возвращает индекс пункта с заданным содержимым
Insert() Вставляет содержимое в указанную позицию списка
Remove() Удаляет заданный пункт из списка
RemoveAt() Удаляет пункты из заданного индексного диапазона

Упражнение 13. Элемент управления HTMLTable (HTMLTableRow, HTMLTableCell)

Эти классы управляют тегами, отображающими таблицу. Через эти классы можно динамически изменять свойства тегов <table> - таблица в целом, <tr> - строка таблицы, <th> - заголовочный столбец, <td> - простой столбец. Можно, также, добавлять и уничтожать строки и ячейки. Приведем пример, в котором будем программно управлять таблицей с помощью выпадающих списков.

  • Добавьте к проекту новую страницу типа Web Form с отделенным кодом и именем HTMLTable.aspx
  • Назначьте ее стартовой для удобства отладки
  • Используя компоненты вкладки HTML панели Toolbox, оформите интерфейсную часть страницы так, как показано на рисунке, где программируемые (серверные) элементы отмечены зеленым маркером. Списки Select и подписи для них поместите в локализующую таблицу размером 2x6 с невидимыми границами
  • Гиперссылки вместе с локализующей таблицей скопируйте из предыдущей страницы и откорректируйте так
<a href="HTMLSelect.aspx">Назад</a>
	 <a href="HTMLTextArea.aspx">Вперед</a>

  • Через меню свойств назначьте таблице идентификатор table, спискам соответственно bgColor, border, cellPad, cellSpac, selectRow, rowColor, Execute
  • Войдите в Source -режим и вручную присвойте дескрипторам <tr> таблицы table атрибуты runat="server" и id=Tr1, id=Tr2, id=Tr3

Дерево интерфейсных элементов с присвоенными им идентификаторами хорошо просматривается в панели Document Outline

  • Создайте обработчик для кнопки Submit, по щелчку на которой информация о текущем состоянии элементов управления в броузере будет собрана отправлена на сервер, и заполните обрабатывающий файл HTMLTable.aspx.cs следующим кодом
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
    
public partial class HTMLTable : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // Динамическое заполнение списков 
        // выполнить только при первом запросе
        if (!this.IsPostBack)
        {
            // Заполнение списка bgColor
            bgColor.Items[0].Text = "None";
            bgColor.Items[0].Value = "";
            bgColor.Items.Add("White");
            bgColor.Items.Add("Red");
            bgColor.Items.Add("Green");
            bgColor.Items.Add("Blue");
            bgColor.Items.Add("Yellow");
    
            // Заполнение списка border
            border.Items[0].Text = "0";
            border.Items.Add("1");
            border.Items.Add("2");
            border.Items.Add("3");
            border.Items.Add("4");
            border.Items.Add("5");
            border.SelectedIndex = 1;// Сделать текущей
    
            // Заполнение списка cellPad
            cellPad.Items[0].Text = "0";
            cellPad.Items.Add("1");
            cellPad.Items.Add("2");
            cellPad.Items.Add("3");
            cellPad.Items.Add("4");
            cellPad.Items.Add("5");
    
            // Заполнение списка cellSpace
            cellSpac.Items[0].Text = "0";
            cellSpac.Items.Add("1");
            cellSpac.Items.Add("2");
            cellSpac.Items.Add("3");
            cellSpac.Items.Add("4");
            cellSpac.Items.Add("5");
    
            // Заполнение списка selectRow
            selectRow.Items[0].Text = "1";
            selectRow.Items.Add("2");
            selectRow.Items.Add("3");
    
            // Заполнение списка rowColor
            rowColor.Items[0].Text = "None";
            rowColor.Items[0].Value = "";
            rowColor.Items.Add("White");
            rowColor.Items.Add("Red");
            rowColor.Items.Add("Green");
            rowColor.Items.Add("Blue");
            rowColor.Items.Add("Yellow");
        }
    }
    
    protected void Execute_ServerClick(object sender, EventArgs e)
    {
        // Управление атрибутами всей таблицы
        table.BgColor = bgColor.Value;
        table.Border = Convert.ToInt32(border.Value);
        table.CellPadding = Convert.ToInt32(cellPad.Value);
        table.CellSpacing = Convert.ToInt32(cellSpac.Value);
    
        // Управление атрибутами отдельных строк
        if (selectRow.Value == "1")
            Tr1.BgColor = rowColor.Value;
        else if (selectRow.Value == "2")
            Tr2.BgColor = rowColor.Value;
        else if (selectRow.Value == "3")
            Tr3.BgColor = rowColor.Value;
    }
}
Листинг 3.26. Код файла HTMLTable.aspx.cs
  • Постройте приложение и убедитесь в его работоспособности. Результат внешне должен выглядеть примерно так

Обратите внимание, что изменение фонового цвета всей таблицы не может изменить фоновый цвет, определенный для конкретной строки. Этим демонстрируется важное правило HTML и CSS (каскадные таблицы стилей), что внутренний атрибут всегда отменяет значение одноименного внешнего атрибута (своя рубаха ближе к телу).

  • Исходный код интерфейсной части может быть таким (приводится из милости к любимым студентам)
<%@ Page Language="C#" AutoEventWireup="true" 
    CodeFile="HTMLTable.aspx.cs" Inherits="HTMLTable" %>
    
<html>
<head>
    <title>HTMLTable</title>
</head>
<body>
    <div align="center">
        <form id="form1" runat="server" method="post">
            <h1>
                Программное управление свойствами таблицы</h1>
            <div>
                Управляемая таблица
            </div>
            <table id="table" runat="server" border="1" width="550">
                <tr id="Tr1" runat="server">
                    <td style="width: 77px">
                        Стих 1
                    </td>
                    <td>
                        Мы рубим ступени - ни шагу назад
                    </td>
                </tr>
                <tr id="Tr2" runat="server">
                    <td style="width: 77px">
                        Стих 2
                    </td>
                    <td>
                        И от напряжения колени дрожат
                    </td>
                </tr>
                <tr id="Tr3" runat="server">
                    <td style="width: 77px">
                        Стих 3
                    </td>
                    <td>
                        И сердце к вершине готово бежать из груди
                    </td>
                </tr>
            </table>
            <br />
            <table border="0" width="100%">
                <tr align="center">
                    <td style="width: 17%">
                        Background Color</td>
                    <td style="width: 17%">
                        Border</td>
                    <td style="width: 17%">
                        Cellpadding</td>
                    <td style="width: 17%">
                        Cellspacing</td>
                    <td style="width: 17%">
                        Select a Row</td>
                    <td style="width: 17%">
                        Row Color</td>
                </tr>
                <tr align="center">
                    <td>
                        <select id="bgColor" runat="server" style="width: 138px;">
                            <option selected=""></option>
                        </select></td>
                    <td>
                        <select id="border" runat="server" style="width: 74px;">
                            <option selected=""></option>
                        </select></td>
                    <td>
                        <select id="cellPad" runat="server" style="width: 90px;">
                            <option selected=""></option>
                        </select></td>
                    <td>
                        <select id="cellSpac" runat="server" style="width: 84px;">
                            <option selected=""></option>
                        </select></td>
                    <td>
                        <select id="selectRow" runat="server" style="width: 102px;">
                            <option selected=""></option>
                        </select></td>
                    <td>
                        <select id="rowColor" runat="server" style="width: 82px;">
                            <option selected=""></option>
                        </select></td>
                </tr>
            </table>
            <br />
            <input id="Execute" runat="server" type="submit" 
                   value="Submit" onserverclick="Execute_ServerClick">
            <br />
            <br />
            <table id="Table2" border="0" cellpadding="1" cellspacing="1" width="160">
                <tr>
                    <td align="right">
                        <a href="HTMLSelect.aspx">Назад</a></td>
                    <td style="width: 20px"></td>
                    <td>
                        <a href="HTMLTextArea.aspx">Вперед</a></td>
                </tr>
            </table>
        </form>
    </div>
</body>
</html>
Листинг 3.27. Код интерфейсной части страницы HTMLTable.aspx