Управление 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 и
перенесите на форму компоненты, которые нужно расположить
в соответствии с рисунком
- Контейнер Div с размещенным в нем текстом "Элемент управления HTMLSelect" заголовка страницы
- Компонент Input (Text) текстового поля с идентификатором id=optionTag
- Контейнер Div с размещенным в нем текстом "Новая опция:" для маркировки текстового поля optionTag
- Контейнер Div с размещенным в нем текстом "Результат" и идентификатором id=message для программного управления
- Контейнер Div с размещенным в нем текстом "Сообщения:" для маркировки контейнера message
- Компонент Select с идентификатором id=selectTag для программного управления
- Кнопку Input (Submit) с идентификатором id=AddOption для программного управления и Value="Добавить новую опцию"
- Кнопку Input (Submit) с идентификатором id=GetSelected для программного управления и Value="Показать выбор"
- Компонент 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, содержит элементы списка и члены для управления этими элементами. Некоторые из этих членов приведены в таблице
Упражнение 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




