Файл: Справочник для опытных и как пособие для начинающих программистов. Компактдиск содержит исходные коды примеров из книги.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.01.2024
Просмотров: 961
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Code и попадем на вкладку файла программной поддержки WebForm1.aspx.es. В листинге 13.8 приведен соответствующий программный код.
Листинг 13.8. Таблица с переменным числом ячеек
// Tаблица с переменным числом ячеек, управляемая двумя раскрывающимися списками. Web-страница позволяет с
// помощью двух раскрывающихся списков DropDownList заказать необходимое число рядов и столбцов в таблице,
// а затем строить заказанную таблицу
using System;
using System.Web.UI.WebControls;
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace tab
{
public partial class WebForm1: Systern.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Page.Title = "Укажите размерность таблицы";
if (Page.IsPostBack == true) return;
// Заполнять выпадающий список необходимо при первой загрузке
// страницы IsPostBack = false, иначе будут добавляться новые
// пункты в выпадающей список при каждой перегрузке страницы
DropDownList1.Items.Add("1"); DropDownList1.Items.Add("2"); DropDownList1.Items.Add("3");
DropDownList2.Items.Add("1"); DropDownList2.Items.Add("2"); DropDownList2.Items.Add("3");
Table1.Caption = "Название таблицы";
Table1.CaptionAlign = TableCaptionAlign.Right;
Table1.ToolTip = "Укажи количество рядов и столбцов и нажми кнопку";
Table1. BorderStyle = BorderStyle.Solid;
Table1.GridLines = GridLines.Both;
Label1.Text = "Кол-во строк"; Label2.Text = "Кол-во столбцов";
Button1.Text = "Обновить таблицу";
}
protected void Button1_Click(object sender, EventArgs e)
{
int i, j ;
for (i = 1; i <= int.Parse(DropDownListl.Selectedltem.Value); i++)
{
var РЯД = new TableRow ();
for (j = 1; j <= int.Parse(DropDownList2.Selectedltem.Value); j++)
{
var ЯЧЕЙКА = new TableCell();
ЯЧЕЙКА.Text = "Ряд " + i + ", Кол " + j;
ЯЧЕЙКА.HorizontalAlign = HorizontalAlign.Center;
РЯД.Cells.Add(ЯЧЕЙКА);
}
Table1.Rows.Add(РЯД);
}
}
}
}
Как видно из программного кода, при загрузке страницы Page_Load происходит заполнение значениями раскрывающихся списков DropDownList, причем заполнение осуществляется только при первоначальной загрузке страницы, когда IsPostBack = false. Если бы мы не предусмотрели обход присвоения начальных значений при IsPostBack = true, то значения в списке добавлялись бы каждый раз при очередной перезагрузке страницы. Заметим, что мы могли бы и не контролировать IsPostBack, если бы присвоение начальных значений выполнили в процедуре обработки события инициализации страницы Page_PreInit (в Visual Studio 2003 это событие называлось Page_Init).
Свойства других элементов управления также инициализированы при обработке события загрузки
Web-страницы Page_Load. Мы могли бы это сделать в конструкторе, но для удобства читателя приводим их в программном коде. Назначения этихсвойств очевидны и не требуют дополнительных комментариев.
При обработке события "щелчок на кнопке" Обновить таблицу имеем два вложенных цикла. Параметры обоих циклов i и j изменяются от 1 до значения, выбранного пользователем в соответствующем раскрывающемся списке. Метод int.Parse пространства имен System конвертирует строку из соответствующего свойства объекта DropDownList в переменную типа int. Внешний цикл перебирает ряды таблицы, а внутренний — ячейки таблицы. В теле внешнего цикла очередная итерация создает новый объект ряд класса TableRow, аналогично в теле внутреннего цикла каждый раз создается новый объект ячейка класса TableCell.
Для старта созданного проекта нажмем клавишу <F5>. В результате получим примерно такое отображение таблицы, как показано на рис. 13.12.
Убедиться в работоспособности Web-страницы можно, открыв решение tab.sln в папке tab.
Рис. 13.12. Фрагмент работы Web-страницы с таблицей
Пример 96. Организация раскрывающегося меню гиперссылок с помощью DropDownList
Переходы на другие Web-страницы, так называемую навигацию, в статических HTML-страницах обычно организуют с помощью ряда гиперссылок. Например, сайт состоит из десяти Web-страниц. На каждой из этих страниц слева имеем колонку из десяти строчек текстовых гиперссылок для перехода на эти страницы В данном примере продемонстрируем, как можно организовать переход на разные страницы сайта с помощью раскрывающегося списка DropDownList.
Для реализации этой задачи запустим систему Visual Studio 2010, далее — новый проект из шаблона Empty ASP.NET Web Application, имя — Menu. К текущему проекту добавим Web-форму. Для этого в пункте меню Project выберем команду Add New Item и в появившемся окне дважды щелкнем на шаблоне Web Form.
Затем на проектируемую Web-форму перетащим из раздела Standard панели Toolbox элемент управления DropDownList и метку Label. Теперь перейдем к вкладке файла программной поддержки WebForm1.aspx.cs и здесь организуем гиперссылки от каждого пункта меню на некоторые Web-страницы, созданные в данной главе. Текст программы приведен в листинге 13.9.
Листинг 13.9. Организация навигации по Web-страницам
// Web-страница демонстрирует, как можно организовать переход на разные
// страницы сайта (гиперссылки) с помощью раскрывающегося списка DropDownList
using System;
using System.Web.UI.WebControls;
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace Menu
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Page.Title = "Переход на другую страницу:",-
if (Page.IsPostBack == true) return;
// Можно писать так:
// var it1 = new System.Web.UI.WebControls.Listltem();
// it1.Text = "Сложить два числа";
// it1.Value = "Summa.aspx";
// DropDownListl.Items.Add(it1);
// А можно короче:
// DropDownList1.Items.Add(new Listltem("Имя", "значение"))
DropDownList1.Items.Add(new Listltem("Остаться на этой странице", "WebForm1 .aspx")) ; DropDownList1.Items.Add(new Listltem( "Проверка достоверности введенных данных","Validations.aspx")); DropDownList1.Items.Add(new Listltem( "Управляемая таблица", "tab.aspx"));
// Выполнять ли повторную отправку (постбэк), когда
// пользователь сделает выбор в раскрывающемся списке?
DropDownList1.AutoPostBack = true;
// При AutoPostBack = True будет работать
// событие DropDownListl_SelectedIndexChanged.
Label1.Text = "Перейти на другую Web-страницу:";
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{ // Выполнить команду перехода на другую страницу:
Response.Redirect(DropDownListl.SelectedValue);
}
//protected void Page_PreInit(object sender, EventArgs e)
//{
// Мы могли бы заполнять пункты раскрывающегося списка DropDownList
// не при загрузке формы, а при ее инициализации (событие
// Page_PreInit), тогда не надо думать про постбэк.
// Чтобы получить обработчик этого события, надо просто его
// написать: protected void Page_PreInit...
//}
}
}
Здесь, так же как и в предыдущем примере, мы заполняли пункты раскрывающегося списка при первой загрузке страницы IsPostBack = false. Это можно было бы делать также при инициализации Web-страницы (событие Page_PreInit). Причем заполняли список по формату ("Имя", "Значение"). Здесь "Имя" будет видно в пунктах меню, а "Значение" можно использовать функционально.
Кроме того, для раскрывающегося списка мы указали свойство AutoPostBack = true, что приведет к повторной отправке, когда пользователь сделает свой выбор в раскрывающемся списке, причем в этом случае будет доступно событие SelectedIndexChanged. Именно этим событием мы воспользовались для перенаправления (Redirect) браузера на выбранную пользователем страницу.
Как видно, все выбираемые пользователем Web-страницы являются активными ASPX-страницами. Чтобы добавить их в текущий проект следует выбрать в пункте меню Project команду Add New Item и дважды щелкнуть на шаблоне Web Form. В окне Solution Explorer щелкнем правой кнопкой мыши на названии файла и переименуем новую Web-форму из WebForm2.aspx в Validations.aspx. Аналогично следует добавить вторую вызываемую Web-форму и назвать ее tab.aspx. Перед стартом программы (<F5>) в окне Solution Explorer правой кнопкой мыши щелкнем по изображению файла WebForm1.aspx и в контекстном меню выберем команду Set As Start Page, чтобы программа начала работу с этой страницы.
Фрагмент работы данной Web-страницы приведен на рис. 13.13.
Рис. 13.13. Фрагмент работы Web-страницы, использующей раскрывающийся список
Упомянутая функция Redirect является методом объекта Response. Очень часто пользуются методом Write объекта Response для вывода в Web-форму каких-либо данных, в том числе для тестирования, отладки программы. Вообще говоря, в технологии ASP.NET имеются два очень важных объекта: Response и Request, объект Response содержит данные для передачи от сервера клиенту, а объект
Request — информацию, полученную от пользователя. В дальнейшем мы будем вращаться к этим двум объектам.
Убедиться в работоспособности Web-страницы можно, открыв решение Menu.sln в папке Menu.
Пример 97. Передача данных между Web-страницами через параметры гиперссылки
Передача данных между Web-страницами одного сайта может происходить через файлы, через объект Session, а может быть реализована через параметры, указанные в гиперссылке. Эти параметры также называют строкой запроса. Например, пересылка <a href="Target.aspx?nl=77&n2='Зиборов' "> после вопросительного знака содержит два параметра— n1 и п2. Значения этих параметров будут переданы в Web-документ Target.aspx. Прочитать эти параметры в Target.aspx можно с помощью объекта Request.
В данном примере создадим две Web-страницы: Source.aspx и Target.aspx. На первой странице Source.aspx с помощью генератора случайных чисел Random выбираем одну из пар "имя—фамилия", затем кодируем их, чтобы они не были видны в адресной строке. Щелчок пользователя по гиперссылке вызывает переход на страницу Target.aspx, причем в гиперссылке указаны оба закодированных параметра. На этой новой странице с помощью объекта Request получаем оба переданных параметра и выводим их в Web-документе.
Для реализации данной задачи запустим Visual Studio 2010, далее в окне New project выберем шаблон Empty ASP.NET Web Application, в поле Name укажем имя Ssylka. К текущему проекту добавим Web-форму. Для этого в пункте меню Рroject выберем команду Add New Item и в появившемся окне дважды щелкнем на шаблоне Web Form.
В этом проекте будем программировать две Web-формы: одну назовем Source.aspx, а вторую— Target.aspx. Сначала спроектируем первую форму, для этого в окне Solution Explorer переименуем файл WebForm1.aspx в Source.aspx. Теперь на вкладку Source.aspx из раздела Standard панели Toolbox перенесем элемент управления HyperLink (Гиперссылка). Содержимое файла программной поддержки Source.aspx.cs приведено в листинге 13.10.
Листинг 13.10. Передача данных между Web-страницами через параметры гиперссылки
// Передача данных между Web-страницами через параметры гиперссылки. В данном
// примере имеем две Web-страницы: Source.aspx и Target.aspx. На первой
// странице Source.aspx с помощью генератора случайных чисел Random выбираем
Листинг 13.8. Таблица с переменным числом ячеек
// Tаблица с переменным числом ячеек, управляемая двумя раскрывающимися списками. Web-страница позволяет с
// помощью двух раскрывающихся списков DropDownList заказать необходимое число рядов и столбцов в таблице,
// а затем строить заказанную таблицу
using System;
using System.Web.UI.WebControls;
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace tab
{
public partial class WebForm1: Systern.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Page.Title = "Укажите размерность таблицы";
if (Page.IsPostBack == true) return;
// Заполнять выпадающий список необходимо при первой загрузке
// страницы IsPostBack = false, иначе будут добавляться новые
// пункты в выпадающей список при каждой перегрузке страницы
DropDownList1.Items.Add("1"); DropDownList1.Items.Add("2"); DropDownList1.Items.Add("3");
DropDownList2.Items.Add("1"); DropDownList2.Items.Add("2"); DropDownList2.Items.Add("3");
Table1.Caption = "Название таблицы";
Table1.CaptionAlign = TableCaptionAlign.Right;
Table1.ToolTip = "Укажи количество рядов и столбцов и нажми кнопку";
Table1. BorderStyle = BorderStyle.Solid;
Table1.GridLines = GridLines.Both;
Label1.Text = "Кол-во строк"; Label2.Text = "Кол-во столбцов";
Button1.Text = "Обновить таблицу";
}
protected void Button1_Click(object sender, EventArgs e)
{
int i, j ;
for (i = 1; i <= int.Parse(DropDownListl.Selectedltem.Value); i++)
{
var РЯД = new TableRow ();
for (j = 1; j <= int.Parse(DropDownList2.Selectedltem.Value); j++)
{
var ЯЧЕЙКА = new TableCell();
ЯЧЕЙКА.Text = "Ряд " + i + ", Кол " + j;
ЯЧЕЙКА.HorizontalAlign = HorizontalAlign.Center;
РЯД.Cells.Add(ЯЧЕЙКА);
}
Table1.Rows.Add(РЯД);
}
}
}
}
Как видно из программного кода, при загрузке страницы Page_Load происходит заполнение значениями раскрывающихся списков DropDownList, причем заполнение осуществляется только при первоначальной загрузке страницы, когда IsPostBack = false. Если бы мы не предусмотрели обход присвоения начальных значений при IsPostBack = true, то значения в списке добавлялись бы каждый раз при очередной перезагрузке страницы. Заметим, что мы могли бы и не контролировать IsPostBack, если бы присвоение начальных значений выполнили в процедуре обработки события инициализации страницы Page_PreInit (в Visual Studio 2003 это событие называлось Page_Init).
Свойства других элементов управления также инициализированы при обработке события загрузки
Web-страницы Page_Load. Мы могли бы это сделать в конструкторе, но для удобства читателя приводим их в программном коде. Назначения этихсвойств очевидны и не требуют дополнительных комментариев.
При обработке события "щелчок на кнопке" Обновить таблицу имеем два вложенных цикла. Параметры обоих циклов i и j изменяются от 1 до значения, выбранного пользователем в соответствующем раскрывающемся списке. Метод int.Parse пространства имен System конвертирует строку из соответствующего свойства объекта DropDownList в переменную типа int. Внешний цикл перебирает ряды таблицы, а внутренний — ячейки таблицы. В теле внешнего цикла очередная итерация создает новый объект ряд класса TableRow, аналогично в теле внутреннего цикла каждый раз создается новый объект ячейка класса TableCell.
Для старта созданного проекта нажмем клавишу <F5>. В результате получим примерно такое отображение таблицы, как показано на рис. 13.12.
Убедиться в работоспособности Web-страницы можно, открыв решение tab.sln в папке tab.
Рис. 13.12. Фрагмент работы Web-страницы с таблицей
Пример 96. Организация раскрывающегося меню гиперссылок с помощью DropDownList
Переходы на другие Web-страницы, так называемую навигацию, в статических HTML-страницах обычно организуют с помощью ряда гиперссылок. Например, сайт состоит из десяти Web-страниц. На каждой из этих страниц слева имеем колонку из десяти строчек текстовых гиперссылок для перехода на эти страницы В данном примере продемонстрируем, как можно организовать переход на разные страницы сайта с помощью раскрывающегося списка DropDownList.
Для реализации этой задачи запустим систему Visual Studio 2010, далее — новый проект из шаблона Empty ASP.NET Web Application, имя — Menu. К текущему проекту добавим Web-форму. Для этого в пункте меню Project выберем команду Add New Item и в появившемся окне дважды щелкнем на шаблоне Web Form.
Затем на проектируемую Web-форму перетащим из раздела Standard панели Toolbox элемент управления DropDownList и метку Label. Теперь перейдем к вкладке файла программной поддержки WebForm1.aspx.cs и здесь организуем гиперссылки от каждого пункта меню на некоторые Web-страницы, созданные в данной главе. Текст программы приведен в листинге 13.9.
Листинг 13.9. Организация навигации по Web-страницам
// Web-страница демонстрирует, как можно организовать переход на разные
// страницы сайта (гиперссылки) с помощью раскрывающегося списка DropDownList
using System;
using System.Web.UI.WebControls;
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace Menu
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Page.Title = "Переход на другую страницу:",-
if (Page.IsPostBack == true) return;
// Можно писать так:
// var it1 = new System.Web.UI.WebControls.Listltem();
// it1.Text = "Сложить два числа";
// it1.Value = "Summa.aspx";
// DropDownListl.Items.Add(it1);
// А можно короче:
// DropDownList1.Items.Add(new Listltem("Имя", "значение"))
DropDownList1.Items.Add(new Listltem("Остаться на этой странице", "WebForm1 .aspx")) ; DropDownList1.Items.Add(new Listltem( "Проверка достоверности введенных данных","Validations.aspx")); DropDownList1.Items.Add(new Listltem( "Управляемая таблица", "tab.aspx"));
// Выполнять ли повторную отправку (постбэк), когда
// пользователь сделает выбор в раскрывающемся списке?
DropDownList1.AutoPostBack = true;
// При AutoPostBack = True будет работать
// событие DropDownListl_SelectedIndexChanged.
Label1.Text = "Перейти на другую Web-страницу:";
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{ // Выполнить команду перехода на другую страницу:
Response.Redirect(DropDownListl.SelectedValue);
}
//protected void Page_PreInit(object sender, EventArgs e)
//{
// Мы могли бы заполнять пункты раскрывающегося списка DropDownList
// не при загрузке формы, а при ее инициализации (событие
// Page_PreInit), тогда не надо думать про постбэк.
// Чтобы получить обработчик этого события, надо просто его
// написать: protected void Page_PreInit...
//}
}
}
Здесь, так же как и в предыдущем примере, мы заполняли пункты раскрывающегося списка при первой загрузке страницы IsPostBack = false. Это можно было бы делать также при инициализации Web-страницы (событие Page_PreInit). Причем заполняли список по формату ("Имя", "Значение"). Здесь "Имя" будет видно в пунктах меню, а "Значение" можно использовать функционально.
Кроме того, для раскрывающегося списка мы указали свойство AutoPostBack = true, что приведет к повторной отправке, когда пользователь сделает свой выбор в раскрывающемся списке, причем в этом случае будет доступно событие SelectedIndexChanged. Именно этим событием мы воспользовались для перенаправления (Redirect) браузера на выбранную пользователем страницу.
Как видно, все выбираемые пользователем Web-страницы являются активными ASPX-страницами. Чтобы добавить их в текущий проект следует выбрать в пункте меню Project команду Add New Item и дважды щелкнуть на шаблоне Web Form. В окне Solution Explorer щелкнем правой кнопкой мыши на названии файла и переименуем новую Web-форму из WebForm2.aspx в Validations.aspx. Аналогично следует добавить вторую вызываемую Web-форму и назвать ее tab.aspx. Перед стартом программы (<F5>) в окне Solution Explorer правой кнопкой мыши щелкнем по изображению файла WebForm1.aspx и в контекстном меню выберем команду Set As Start Page, чтобы программа начала работу с этой страницы.
Фрагмент работы данной Web-страницы приведен на рис. 13.13.
Рис. 13.13. Фрагмент работы Web-страницы, использующей раскрывающийся список
Упомянутая функция Redirect является методом объекта Response. Очень часто пользуются методом Write объекта Response для вывода в Web-форму каких-либо данных, в том числе для тестирования, отладки программы. Вообще говоря, в технологии ASP.NET имеются два очень важных объекта: Response и Request, объект Response содержит данные для передачи от сервера клиенту, а объект
Request — информацию, полученную от пользователя. В дальнейшем мы будем вращаться к этим двум объектам.
Убедиться в работоспособности Web-страницы можно, открыв решение Menu.sln в папке Menu.
Пример 97. Передача данных между Web-страницами через параметры гиперссылки
Передача данных между Web-страницами одного сайта может происходить через файлы, через объект Session, а может быть реализована через параметры, указанные в гиперссылке. Эти параметры также называют строкой запроса. Например, пересылка <a href="Target.aspx?nl=77&n2='Зиборов' "> после вопросительного знака содержит два параметра— n1 и п2. Значения этих параметров будут переданы в Web-документ Target.aspx. Прочитать эти параметры в Target.aspx можно с помощью объекта Request.
В данном примере создадим две Web-страницы: Source.aspx и Target.aspx. На первой странице Source.aspx с помощью генератора случайных чисел Random выбираем одну из пар "имя—фамилия", затем кодируем их, чтобы они не были видны в адресной строке. Щелчок пользователя по гиперссылке вызывает переход на страницу Target.aspx, причем в гиперссылке указаны оба закодированных параметра. На этой новой странице с помощью объекта Request получаем оба переданных параметра и выводим их в Web-документе.
Для реализации данной задачи запустим Visual Studio 2010, далее в окне New project выберем шаблон Empty ASP.NET Web Application, в поле Name укажем имя Ssylka. К текущему проекту добавим Web-форму. Для этого в пункте меню Рroject выберем команду Add New Item и в появившемся окне дважды щелкнем на шаблоне Web Form.
В этом проекте будем программировать две Web-формы: одну назовем Source.aspx, а вторую— Target.aspx. Сначала спроектируем первую форму, для этого в окне Solution Explorer переименуем файл WebForm1.aspx в Source.aspx. Теперь на вкладку Source.aspx из раздела Standard панели Toolbox перенесем элемент управления HyperLink (Гиперссылка). Содержимое файла программной поддержки Source.aspx.cs приведено в листинге 13.10.
Листинг 13.10. Передача данных между Web-страницами через параметры гиперссылки
// Передача данных между Web-страницами через параметры гиперссылки. В данном
// примере имеем две Web-страницы: Source.aspx и Target.aspx. На первой
// странице Source.aspx с помощью генератора случайных чисел Random выбираем