Файл: Справочник для опытных и как пособие для начинающих программистов. Компактдиск содержит исходные коды примеров из книги.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 Applica­tion, в поле 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.