Файл: Справочник для опытных и как пособие для начинающих программистов. Компактдиск содержит исходные коды примеров из книги.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.01.2024
Просмотров: 935
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
ПЕРЕХОД", а свойству кнопки PostBackUrl назначаем URL-адрес, на который должно перейти управление при щелчке на командной кнопке. Заметим, что, используя свойство PostBackUrl, мы можем не обрабатывать событие "щелчок на кнопке", поскольку переход при щелке на кнопке будет осуществляться на страницу, указанную в этом свойстве. Однако в комментарии указано как альтернатива использование метода Redirect объекта Response.
Замечу, что Web-формы res.aspx, на которую имеем ссылку в программном коде, еще нет в нашем проекте. Добавим эту форму так же, как добавили исходную форму, т. е. используя в пункте меню Project команду Add New Item, выберем шаблон новой формы Web Form. Никаких элементов управления на эту форму не добавляем. В окне Solution Explorer переименуем новую появившуюся форму в s.aspx. На вкладке программого кода res.aspx.cs напишем текст, приведенный в листинге 13.14.
Листинг 13.14. Получение данных на второй Web-странице
// Получаем данные со страницы ishod.aspx
using System;
using System.Web.UI.WebControls;
//Другие директивы using удалены, поскольку они не используются в данной программе
namespace Передача2
{
public partial class res : Systern.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
try
{ // Создаем объекты, как на форме-источнике:
TextBox ТекстовоеПоле = (TextBox)Page. PreviousPage.FindControl("TextBoxl");
Button Кнопка = (Button)Page.PreviousPage.FindControl("Button1");
// Значения элементов управления могут быть также получены с помощью
// метода Form.Get объекта Request: string SI = Request.Form.Get("TextBoxl");
// string S2 = Request.Form.Get("Buttonl");
Response.Write(@"На начальной странице:
");
Response.Write(" - содержимое текстового поля: " + ТекстовоеПоле.Text + @"
");
Response.Write(" - надпись на кнопке: " + Кнопка.Text);
}
catch (Exception ex)
{
Response.Write("Начальная Web-страница должна " + @"содержать<Ьг />текстовое поле и командную " + @"кнопку.
" + ex.Message);
}
}
}
}
Как видно из данного программного кода, новая, результирующая форма не содержит ни одного элемента управления. Вывод текста в форму осуществляем с помощью метода Write объекта Response. Чтобы вывести в новую форму значения элементов управления первоначальной формы, воспользуемся методом FindControl объекта PreviousPage. На вход этого метода подадим идентификатор (ID) соответствующего элемента управления, указанного в HTML-разметке первоначальной формы ishod.aspx. Функция FindControl возвращает объект класса Web.UI.Control, его удобно конвертировать в объект класса
TextBox или Button с помощью неявного преобразования. В комментарии показано, как можно получить значения элементов управления первоначальной формы также с помощью метода Form.Get объекта Request.
Рис. 13.19. Первоначальная форма
Перед тем как запустить созданный проект на выполнение, в окне Solution Explorer назначим в качестве стартовой страницы проекта файл ishod.aspx: в контекстном меню для этого файла выберем команду Set As Start Page. На рис. 13.19 показана исходная форма ishod.aspx с текстовым полем, подлежащим заполнению и командной кнопкой.
На рис. 13.20 продемонстрирована результирующая форма, где отображены значения элементов управления первоначальной формы.
Рис. 13.20. Результирующая форма
Убедиться в работоспособности Web-страницы можно, открыв решение Передача2.sln в папке Передача2.
Пример 100. Отображение табличных данных в Web-форме с помощью элемента управления GridView
В данном примере покажем, как можно вывести какие-либо данные, например два строковых массива в виде таблицы в Web-форму с помощью элемента управления GridView (просмотр или обзор сетки данных в таблице) и объекта DataTable. Мы решали подобную задачу для Windows-приложения. Между тем для Web-приложения это также типичная задача, но она имеет некоторые особенности, в частности и там, и здесь в выводе таблицы принимают участие похожие элементы управления (DataGridView и GridView), но свойства и методы этих объектов в разных приложениях немного отличаются. В данной задаче таблица телефонов представлена в виде двух строковых массивов. Требуется минимальными усилиями вывести в Web-форму эти массивы в виде таблицы.
Для решения данной задачи запустим Visual Studio 2010, закажем новый проект шаблона Empty ASP.NET Web Application, в поле Name введем имя TabGrdWeb. К текущему проекту добавим Web-форму. Для этого в пункте меню Project выберем команду Add New Item и в появившемся окне дважды щелкнем на шаблоне Web Form.
Далее перетащим в форму из панели Toolbox (из подраздела Data) элемент управления GridView. Содержимое файла программной поддержки WebForm1.aspx.cs приведено в листинге 13.15.
Листинг 13.15. Вывод табличных данных в
Web-форму с помощью элемента управления GridView
// Вывод табличных данных в Web-форму с помощью элемента управления GridView. НС В данной
// Web-странице организован вывод двух строковых массивов в таблицу Web-формы с помощью
// элемента управления GridView и объекта класса DataTable
using System;
using System.Web.UI.WebControls;
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace TabGrdWeb
{
public partial class WebForml : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Page.Title = "Вывод таблицы в Web-форму";
string[] Imena = { "Андрей - раб", "ЖЭК", "Мама - дом", "Карапузова Таня"};
string[] Tel = { "274-88-17", "22-345-72", "570-38-76", "201-72-23-прямой моб" };
var Таблица = new System.Data.DataTable();
// Заполнение "шапки" таблицы
Таблица.Columns.Add("ИМЕНА");
Таблица.Columns.Add("НОМЕ РА ТЕЛЕФОНОВ");
// Заполнение клеток (ячеек) таблицы
for (int i = 0; i <= 3; i++)
Таблица. Rows. Add (new string[] { Imena [i], Tel[i] .}) ;
// Немного другое свойство, чем в WindowsApplication
GridView1.Caption = "Таблица телефонов";
GridView1.BorderWidth = Unit.Pixel(2);
GridView1.BorderColor = System.Drawing.Color.Gray;
GridView1.DataSource = Таблица;
// Этого нет в WindowsApplication
GridView1.DataBind();
}
}
}
Содержание программного кода очевидно. Вначале инициализируются двa строковых массива: массив имен и массив телефонов, далее с помощью этих массивов заполняются ячейки объекта класса DataTable. Затем этот объект назначается нами источником данных DataSource для сетки данных GridView1. Фрагмет работы данной Web-страницы показан на рис. 13.21.
Рис. 13.21. Фрагмент работы Web-страницы с табличными данными
Замечу, что данную таблицу можно было бы вывести с помощью элемента управления DataList, однако в этом случае пришлось бы задавать шаблоны Тemplate для каждой колонки в ASPX-файле, что на субъективный взгляд автора не технологично. Убедиться в работоспособности Web-страницы можно, открыв решение TabGrdWeb.sln в папке TabGrdWeb.
Пример 101. Отображение в Web-форме хэш-таблицы
Хэш-таблица— это таблица из двух столбцов, один из них содержит ключи, а второй — значения. То есть каждая строка в этой таблице образует пару "ключ— значение". Имея ключ в хэш-таблице, можно быстро найти значение. Хэш-таблицу можно назвать таблицей соответствий. Простейшим примером хэш-таблицы является таблица телефонов, которая участвовала в предыдущем разделе, однако там мы программировали ее просто как два массива. Если эти два массива поместить в
хэштаблицу. то ключом в данном случае было бы фио, а значением — номер телефона. При этом программирование поиска значения по ключу оказалось бы тривиальной задачей, операция добавления и удаления пары также упрощается, поскольку хэш-таблица — это объект, который содержит соответствующие эти и другие методы. В реальной жизни много разнообразных примеров представления данных в виде хэш-таблицы. Например, таблица, где расширения файлов (txt, jpg, mdb, xls) являются ключами, а соответствующими значениями — программы, которые открывают файлы c такими расширениями (Notepad.exe, Pbrush.exe, MSAccess.exe, Excel.exe). Следующим примером является англо-русский и другие словари. База данных доменных имен, которая доменному имени сопоставляет IP-адрес. По принципу хэш-таблицы организованы объекты ViewState и Session технологии ASP.NET.
Поставим следующую задачу, сопоставим в хэш-таблице государства в качестве ключей, а их столицы — в качестве значений. Далее, используя элемент управления GridView, выведем эту хэш-таблицу на Web-страницу. Для этого запустим Visual Studio 2010, закажем новый проект шаблона Empty ASP.NET Web Application, в поле Name укажем имя Hash_Grid. К текущему проекту добавим Web-форму. Для этого в пункте меню Project выберем команду Add New Item и в появившемся окне дважды щелкнем на шаблоне Web Form.
Далее перетащим в форму из панели Toolbox (из подраздела Data) элемент yправления GridView. Содержимое файла программной поддержки WebForml.aspx.csприведено в листинге 13.16.
Листинг 13.16. Хэш-таблица в Web-форме
// Вывод в Web-форму хэш-таблицы, которая позволяет поставить в соответствие государства их столицам.
// То есть в качестве ключей имеем государства, а их cтолицы - в качестве значений. Далее, используя элемент
// управления GridView, программа выводит эту хэш-таблицу на Web-страницу
using System;
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace Hash_Grid
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Page.Title = "Пример хэш-таблицы";
var Хэш = new System.Collections.Hashtable();
// Заполнение хэш-таблицы.
// Можно добавлять записи "ключ-занчение" так:
Хэш["Украина"] = "Киев";
//А можно добавлять так:
Хэш.Add( "Россия", "Москва") ;
// Здесь государство - это ключ, а столица - это значение
Хэш.Add("Белоруссия", "Минск");
// Создаем обычную таблицу (не хэш):
var Таблица = new System.Data.DataTable();
// Заполнение "шапки" таблицы вывода
Таблица.Columns.Add("ГОСУДАРСТВА");
Таблица.Columns.Add("СТОЛИЦЫ");
//В цикле заполняем обычную таблицу парами из хэш-таблицы по рядам:
foreach (System.Collections.DictionaryEntry ОднаПара in Хэш)
// Здесь структура DictionaryEntry
// определяет пару "ключ - значение"
Таблица.Rows.Add(new object[] { ОднаПара.Key, ОднаПара.Value });
// Немного другое свойство, чем в WindowsApplication
GridView1.Caption = "Таблица государств"; // Заголовок таблицы
GridView1.BorderWidth = System.Web.UI.WebControls.Unit.Pixel(2);
GridView1.BorderColor = System.Drawing.Color.Gray;
// Источник данных для GridView
GridView1.DataSource = Таблица;
// Этого нет в WindowsApplication
GridViewl. DataBind ();
}
}
}
Здесь при обработке события загрузки Web-страницы создается объект класса Hachtable. Хэш-таблица заполняется тремя парами "код—значение", причем, как доказано в программном коде, допустимы обе формы записи: через присваивание и посредством метода Add. Далее создается вспомогательный объект класса DataTable, который следует заполнить данными из хэш-таблицы. Хэш-таблица ямеет структуру типа DictionaryEntry, которая позволяет перемещаться по рядам в цикле и таким образом получить все пары из хэш-таблицы. В этом цикле происходит заполнение объекта класса DataTable. Далее, также как и в предыдущем примере, для GridView1 указываем в качестве источника данных заполненный объект DataTable. Пример работы данной Web-страницы показан на рис. 13.22.
Рис. 13.22. Фрагмент работы Web-страницы с хэш-таблицей
В заключение отметим, что хэш-таблицу называют ассоциативным массивом, но в этом "массиве" роль индекса играет ключ. Для реализации хэш-таблицы можно было бы использовать обычный одномерный массив, в котором элементы с четным индексом являются ключами, а с нечетным — значениями. Однако для реализации трех основных операций с хэш-таблицей: добавления новой пары, операции поиска и операции удаления пары по ключу потребовалось бы отлаживать довольно-таки много строчек программного кода.
Убедиться в работоспособности Web-страницы можно, открыв решение Hash._Grid.sln в папке Hash_Grid.
Замечу, что Web-формы res.aspx, на которую имеем ссылку в программном коде, еще нет в нашем проекте. Добавим эту форму так же, как добавили исходную форму, т. е. используя в пункте меню Project команду Add New Item, выберем шаблон новой формы Web Form. Никаких элементов управления на эту форму не добавляем. В окне Solution Explorer переименуем новую появившуюся форму в s.aspx. На вкладке программого кода res.aspx.cs напишем текст, приведенный в листинге 13.14.
Листинг 13.14. Получение данных на второй Web-странице
// Получаем данные со страницы ishod.aspx
using System;
using System.Web.UI.WebControls;
//Другие директивы using удалены, поскольку они не используются в данной программе
namespace Передача2
{
public partial class res : Systern.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
try
{ // Создаем объекты, как на форме-источнике:
TextBox ТекстовоеПоле = (TextBox)Page. PreviousPage.FindControl("TextBoxl");
Button Кнопка = (Button)Page.PreviousPage.FindControl("Button1");
// Значения элементов управления могут быть также получены с помощью
// метода Form.Get объекта Request: string SI = Request.Form.Get("TextBoxl");
// string S2 = Request.Form.Get("Buttonl");
Response.Write(@"На начальной странице:
");
Response.Write(" - содержимое текстового поля: " + ТекстовоеПоле.Text + @"
");
Response.Write(" - надпись на кнопке: " + Кнопка.Text);
}
catch (Exception ex)
{
Response.Write("Начальная Web-страница должна " + @"содержать<Ьг />текстовое поле и командную " + @"кнопку.
" + ex.Message);
}
}
}
}
Как видно из данного программного кода, новая, результирующая форма не содержит ни одного элемента управления. Вывод текста в форму осуществляем с помощью метода Write объекта Response. Чтобы вывести в новую форму значения элементов управления первоначальной формы, воспользуемся методом FindControl объекта PreviousPage. На вход этого метода подадим идентификатор (ID) соответствующего элемента управления, указанного в HTML-разметке первоначальной формы ishod.aspx. Функция FindControl возвращает объект класса Web.UI.Control, его удобно конвертировать в объект класса
TextBox или Button с помощью неявного преобразования. В комментарии показано, как можно получить значения элементов управления первоначальной формы также с помощью метода Form.Get объекта Request.
Рис. 13.19. Первоначальная форма
Перед тем как запустить созданный проект на выполнение, в окне Solution Explorer назначим в качестве стартовой страницы проекта файл ishod.aspx: в контекстном меню для этого файла выберем команду Set As Start Page. На рис. 13.19 показана исходная форма ishod.aspx с текстовым полем, подлежащим заполнению и командной кнопкой.
На рис. 13.20 продемонстрирована результирующая форма, где отображены значения элементов управления первоначальной формы.
Рис. 13.20. Результирующая форма
Убедиться в работоспособности Web-страницы можно, открыв решение Передача2.sln в папке Передача2.
Пример 100. Отображение табличных данных в Web-форме с помощью элемента управления GridView
В данном примере покажем, как можно вывести какие-либо данные, например два строковых массива в виде таблицы в Web-форму с помощью элемента управления GridView (просмотр или обзор сетки данных в таблице) и объекта DataTable. Мы решали подобную задачу для Windows-приложения. Между тем для Web-приложения это также типичная задача, но она имеет некоторые особенности, в частности и там, и здесь в выводе таблицы принимают участие похожие элементы управления (DataGridView и GridView), но свойства и методы этих объектов в разных приложениях немного отличаются. В данной задаче таблица телефонов представлена в виде двух строковых массивов. Требуется минимальными усилиями вывести в Web-форму эти массивы в виде таблицы.
Для решения данной задачи запустим Visual Studio 2010, закажем новый проект шаблона Empty ASP.NET Web Application, в поле Name введем имя TabGrdWeb. К текущему проекту добавим Web-форму. Для этого в пункте меню Project выберем команду Add New Item и в появившемся окне дважды щелкнем на шаблоне Web Form.
Далее перетащим в форму из панели Toolbox (из подраздела Data) элемент управления GridView. Содержимое файла программной поддержки WebForm1.aspx.cs приведено в листинге 13.15.
Листинг 13.15. Вывод табличных данных в
Web-форму с помощью элемента управления GridView
// Вывод табличных данных в Web-форму с помощью элемента управления GridView. НС В данной
// Web-странице организован вывод двух строковых массивов в таблицу Web-формы с помощью
// элемента управления GridView и объекта класса DataTable
using System;
using System.Web.UI.WebControls;
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace TabGrdWeb
{
public partial class WebForml : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Page.Title = "Вывод таблицы в Web-форму";
string[] Imena = { "Андрей - раб", "ЖЭК", "Мама - дом", "Карапузова Таня"};
string[] Tel = { "274-88-17", "22-345-72", "570-38-76", "201-72-23-прямой моб" };
var Таблица = new System.Data.DataTable();
// Заполнение "шапки" таблицы
Таблица.Columns.Add("ИМЕНА");
Таблица.Columns.Add("НОМЕ РА ТЕЛЕФОНОВ");
// Заполнение клеток (ячеек) таблицы
for (int i = 0; i <= 3; i++)
Таблица. Rows. Add (new string[] { Imena [i], Tel[i] .}) ;
// Немного другое свойство, чем в WindowsApplication
GridView1.Caption = "Таблица телефонов";
GridView1.BorderWidth = Unit.Pixel(2);
GridView1.BorderColor = System.Drawing.Color.Gray;
GridView1.DataSource = Таблица;
// Этого нет в WindowsApplication
GridView1.DataBind();
}
}
}
Содержание программного кода очевидно. Вначале инициализируются двa строковых массива: массив имен и массив телефонов, далее с помощью этих массивов заполняются ячейки объекта класса DataTable. Затем этот объект назначается нами источником данных DataSource для сетки данных GridView1. Фрагмет работы данной Web-страницы показан на рис. 13.21.
Рис. 13.21. Фрагмент работы Web-страницы с табличными данными
Замечу, что данную таблицу можно было бы вывести с помощью элемента управления DataList, однако в этом случае пришлось бы задавать шаблоны Тemplate для каждой колонки в ASPX-файле, что на субъективный взгляд автора не технологично. Убедиться в работоспособности Web-страницы можно, открыв решение TabGrdWeb.sln в папке TabGrdWeb.
Пример 101. Отображение в Web-форме хэш-таблицы
Хэш-таблица— это таблица из двух столбцов, один из них содержит ключи, а второй — значения. То есть каждая строка в этой таблице образует пару "ключ— значение". Имея ключ в хэш-таблице, можно быстро найти значение. Хэш-таблицу можно назвать таблицей соответствий. Простейшим примером хэш-таблицы является таблица телефонов, которая участвовала в предыдущем разделе, однако там мы программировали ее просто как два массива. Если эти два массива поместить в
хэштаблицу. то ключом в данном случае было бы фио, а значением — номер телефона. При этом программирование поиска значения по ключу оказалось бы тривиальной задачей, операция добавления и удаления пары также упрощается, поскольку хэш-таблица — это объект, который содержит соответствующие эти и другие методы. В реальной жизни много разнообразных примеров представления данных в виде хэш-таблицы. Например, таблица, где расширения файлов (txt, jpg, mdb, xls) являются ключами, а соответствующими значениями — программы, которые открывают файлы c такими расширениями (Notepad.exe, Pbrush.exe, MSAccess.exe, Excel.exe). Следующим примером является англо-русский и другие словари. База данных доменных имен, которая доменному имени сопоставляет IP-адрес. По принципу хэш-таблицы организованы объекты ViewState и Session технологии ASP.NET.
Поставим следующую задачу, сопоставим в хэш-таблице государства в качестве ключей, а их столицы — в качестве значений. Далее, используя элемент управления GridView, выведем эту хэш-таблицу на Web-страницу. Для этого запустим Visual Studio 2010, закажем новый проект шаблона Empty ASP.NET Web Application, в поле Name укажем имя Hash_Grid. К текущему проекту добавим Web-форму. Для этого в пункте меню Project выберем команду Add New Item и в появившемся окне дважды щелкнем на шаблоне Web Form.
Далее перетащим в форму из панели Toolbox (из подраздела Data) элемент yправления GridView. Содержимое файла программной поддержки WebForml.aspx.csприведено в листинге 13.16.
Листинг 13.16. Хэш-таблица в Web-форме
// Вывод в Web-форму хэш-таблицы, которая позволяет поставить в соответствие государства их столицам.
// То есть в качестве ключей имеем государства, а их cтолицы - в качестве значений. Далее, используя элемент
// управления GridView, программа выводит эту хэш-таблицу на Web-страницу
using System;
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace Hash_Grid
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Page.Title = "Пример хэш-таблицы";
var Хэш = new System.Collections.Hashtable();
// Заполнение хэш-таблицы.
// Можно добавлять записи "ключ-занчение" так:
Хэш["Украина"] = "Киев";
//А можно добавлять так:
Хэш.Add( "Россия", "Москва") ;
// Здесь государство - это ключ, а столица - это значение
Хэш.Add("Белоруссия", "Минск");
// Создаем обычную таблицу (не хэш):
var Таблица = new System.Data.DataTable();
// Заполнение "шапки" таблицы вывода
Таблица.Columns.Add("ГОСУДАРСТВА");
Таблица.Columns.Add("СТОЛИЦЫ");
//В цикле заполняем обычную таблицу парами из хэш-таблицы по рядам:
foreach (System.Collections.DictionaryEntry ОднаПара in Хэш)
// Здесь структура DictionaryEntry
// определяет пару "ключ - значение"
Таблица.Rows.Add(new object[] { ОднаПара.Key, ОднаПара.Value });
// Немного другое свойство, чем в WindowsApplication
GridView1.Caption = "Таблица государств"; // Заголовок таблицы
GridView1.BorderWidth = System.Web.UI.WebControls.Unit.Pixel(2);
GridView1.BorderColor = System.Drawing.Color.Gray;
// Источник данных для GridView
GridView1.DataSource = Таблица;
// Этого нет в WindowsApplication
GridViewl. DataBind ();
}
}
}
Здесь при обработке события загрузки Web-страницы создается объект класса Hachtable. Хэш-таблица заполняется тремя парами "код—значение", причем, как доказано в программном коде, допустимы обе формы записи: через присваивание и посредством метода Add. Далее создается вспомогательный объект класса DataTable, который следует заполнить данными из хэш-таблицы. Хэш-таблица ямеет структуру типа DictionaryEntry, которая позволяет перемещаться по рядам в цикле и таким образом получить все пары из хэш-таблицы. В этом цикле происходит заполнение объекта класса DataTable. Далее, также как и в предыдущем примере, для GridView1 указываем в качестве источника данных заполненный объект DataTable. Пример работы данной Web-страницы показан на рис. 13.22.
Рис. 13.22. Фрагмент работы Web-страницы с хэш-таблицей
В заключение отметим, что хэш-таблицу называют ассоциативным массивом, но в этом "массиве" роль индекса играет ключ. Для реализации хэш-таблицы можно было бы использовать обычный одномерный массив, в котором элементы с четным индексом являются ключами, а с нечетным — значениями. Однако для реализации трех основных операций с хэш-таблицей: добавления новой пары, операции поиска и операции удаления пары по ключу потребовалось бы отлаживать довольно-таки много строчек программного кода.
Убедиться в работоспособности Web-страницы можно, открыв решение Hash._Grid.sln в папке Hash_Grid.