Главная страница

лекция. Зиборов. Справочник для опытных и как пособие для начинающих программистов. Компактдиск содержит исходные коды примеров из книги


Скачать 7.39 Mb.
НазваниеСправочник для опытных и как пособие для начинающих программистов. Компактдиск содержит исходные коды примеров из книги
Анкорлекция
Дата13.04.2023
Размер7.39 Mb.
Формат файлаdoc
Имя файлаЗиборов.doc
ТипСправочник
#1060897
страница21 из 31
1   ...   17   18   19   20   21   22   23   24   ...   31

Рис. 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 выбираем

// одну из пар "имя-фамилия", затем кодируем их, чтобы они не были видны

// в адресной строке. Щелчок пользователя по гиперссылке вызывает переход

//на страницу Target.aspx, причем в гиперссылке указаны оба закодированных

// параметра

using System;

// Другие директивы using удалены, поскольку они не используются в данной программе

namespace Ssylka

{

public partial class Source : Systern.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

// var Генератор = new Random(DateTime.Now.Millisecond);

// или просто

var Генератор = new Random();

int ЧИСЛО = Генератор.Next(0, 3);

string t1 = null, t2 = null;

switch (ЧИСЛО)

{ // Случайное попадание на одну из меток case:

case 0:

t1 = "Витя"; t2 = "Зиборов"; break;

case 1:

t1 = "Света"; t2 = "Ломачинская"; break;

case 2:

t1 = "Андрей"; t2 = "Зиборов-младший"; break;

}

// Закодируем tl и t2 для того, чтобы они не были видны

// в адресной строке:

t1 = System.Web.HttpUtility.UrlEncode(tl);

t2 = System.Web.HttpUtility.UrlEncode(t2);

HyperLink1.Text = "Щелкните эту ссылку для " + "передачи данных на страницу Target.aspx"; HyperLink1.NavigateUrl = "Target.aspx?n1=" + tl + "&n2=" + t2;

}

}

}

Как видно из текста программы, при обработке события загрузки страницы Page_Load создаем объект генератор класса Random, в скобках задаем начало псевдослучайной последовательности, равное, например, как приведено в комментарии, текущей миллисекунде текущей даты. Используя объект генератор, получаем слу­чное число в интервале от 0 до 2. Это число, попадая в оператор множественного вы6opa switch, вызывает присваивание пары "имя—фамилия". Далее функция UrlEncode кодирует t1 и t2 для того, чтобы они не были видны в адресной строке браузера. В конце назначены свойства гиперссылки с указанием параметров n1 и n2 для передачи их в вызываемую Web-страницу Target.aspx. В результате работы Web-формы Source.aspx в браузере мы получим следующее (рис. 13.14).



Рис. 13.14. Фрагмент работы Web-страницы с гиперссылкой

Далее, щелкнув на этой ссылке, мы попадаем на вызываемую Web-страницу Target.aspx. Однако в нашем проекте еще нет Web-страницы Target.aspx. Для добавления новой Web-формы в пункте меню Project выберем команду Add New Item и появившемся окне дважды шелкнем на значке шаблона Web Form. В окне Solution Explorer переименуем (щелкнув правой кнопкой мыши) новую Web- форму из WebForm2.aspx в Target.aspx. Добавлять в эту форму из панели Toolbox ничего из элементов управления не станем, поскольку выводить в форму некоторый текст будем, используя метод Write объекта Response. В листинге 13.11 при­ведено содержимое файла программной поддержки Target.aspx.cs.

Листинг 13.11. Получение переданных параметров

// Передача данных между Web-страницами через параметры гиперссылки. На этой

// новой странице Target.aspx.cs с помощью объекта Request получаем оба

//переданных параметра и выводим их в Web-документе

using System;

// Другие директивы using удалены, поскольку они не используются в данной программе

namespace Ssylka

{

public partial class Target : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{ // Получаем параметры, переданные с Web-страницы, с которой была

// вызвана данная страница

string ИМЯ1, ИМЯ2; // Request - это запрос

ИМЯ1 = Request.QueryString.Get("Nl");

ИМЯ2 = Request.QueryString.Get("N2");

string URL = Request.UrlReferrer.AbsoluteUri;

Response.Write(@"
Вы попали на данную Web-" + "страницу со страницы: " + URL + "
");

Response.Write(@"
Страница " + URL + " передала на " + "данную страницу имя: " +

ИМЯ1 + " и фамилию " + ИМЯ2);

}

}

}

В этом программном коде извлекаем переданные параметры n1 и n2 (в данном cлучае прописные и строчные буквы равнозначны) методом QueryString.Get объ­екта Request. С помощью объекта Request получаем также абсолютный URL-адрес вызывающей страницы. Для вывода какого-либо текста на Web-страницу мы могли бы воспользоваться элементом управления Label, однако мы вывели текст "Вы по­пали..." методом Write объекта Response, чтобы продемонстрировать удобство ме­тода Write, например, для отладки программного кода. Тег <br /> использован нами для того, чтобы начать предложение с новой строки. Перед стартом программы в окне Solution Explorer правой кнопкой мыши щелкнем по изображению файла Source.aspx и в контекстном меню выберем команду Set As Start Page, чтобы программа начала работу с этой страницы. Результат работы Web-страницы приведен на рис. 13.15.



При использовании строки запроса, т. е. параметров гиперссылки, следует помнить, что некоторые браузеры ограничивают длину URL. Поэтому необходимо следить, чтобы текст в адресной строке не превышал 255 символов.

Убедиться в работоспособности Web-страницы можно, открыв решение Ssylka.sln в папке Ssylka.

Пример 98. Передача данных HTML-формы на ASPX-страницу методами класса Request

Имеется возможность предложить пользователю заполнить в форме текстовые поля, установить в какое-либо положение переключатели, выбрать какой-либо элемент из списка и т. д., т. е. выполнить какие-либо манипуляции с элементами управления, а затем перейти на другую Web-страницу и отобразить на этой новой странице измененные свойства элементов управления предыдущей страницы. Замечу, что это — типичная ситуация.

Поставим следующую конкретную задачу. Имеем Web-форму, написанную на "чистом" HTML, т. е. в данной разметке нет тегов ASP, JavaScript-кода или РНР-скрипта, есть только теги HTML. Web-форма содержит два текстовых поля и кнопку для отправки данных. Одно поле приглашает пользователя ввести свое имя, а второе — адрес электронной почты. Щелчок на кнопке отправляет данные, заполненные пользователем в форме, на другую Web-страницу для обработки и отобра­жения принятых данных на этой новой странице.

Для решения этой задачи запустим Visual Studio 2010, закажем новый проект из шаблона Empty ASP.NET Web Application. Добавим Web-форму, содержащую только теги HTML, для этого в пункте меню Project выберем команду Add New Item и в появившемся окне укажем шаблон HTML page. В окне Solution Explorer переименуем новый появившийся файл в ishod.htm, на вкладке View Code этого файла введем HTML-разметку, представленную на рис. 13.16.



Рис. 13.16. HTML-разметка Web-страницы, содержащей форму

Обратите внимание на тег <form>: здесь атрибут action (действие) формы ссылается на страницу, которая будет обрабатывать данные, принятые с формы. Атрибут формы method определяет способ передачи данных. Существуют два ме­тода: get и post. Метод get передает все данные формы в конце URL через пара­метры гиперссылки. Из-за различных ограничений, связанных со спецификой язы­ков и длиной данных, этот метод применяется редко. Метод post передает все данные формы в теле запроса. Этот метод используется чаще, чем get.

Элемент <input> является базовым для всех элементов формы. Он использует­ся для внедрения в форму кнопок, графических изображений, флажков, переключа­телей, паролей и текстовых полей. Атрибут type определяет тип элемента, для тек­стовых полей type="text", для кнопок type=" submit", для флажков type="checkbox" и т. д. Атрибутом name мы будем пользоваться для идентифика­ции элементов управления при обработке данных формы. Атрибутом value мы воспользовались, чтобы в первом поле по умолчанию каждый раз при запуске формы оказывалась фамилия автора.

Заметьте, что Visual Studio 2010 содержит удобный HTML-редактор, который зеленым подчеркиванием указывает на синтаксические ошибки, допущенные при вводе HTML-разметки. Для примера на рис. 13.16 значение атрибута type не за­ключено в двойные кавычки, редактор HTML-разметки подчеркнул этот фрагмент зеленой волнистой линией, и при "зависании" указателя мыши над ним мы получили сообщение об этой ошибке: "Validation (XHTML 1.0 Transitional): Attribute 'alues must be enclosed in quotation marks".

Нажмем клавишу <F5> для запуска данного проекта, в результате получим форму, подлежащую заполнению (рис. 13.17).



Рис. 13.17. Форма для заполнения и дальнейшей обработки

Теперь создадим Web-страницу, которая будет обрабатывать данные, принятые формы. Для этого в пункте меню Project выберем команду Add New Item, в новом появившемся окне укажем шаблон Web Form и добавим его к нашему проекту. В окне Solution Explorer переименуем новый файл в res.aspx. На этой новой границе текущего проекта мы не будем использовать никакие элементы управления. Отображать принятые новой страницей данные будем с помощью объекта Response. На вкладке файла программной поддержки res.aspx.cs введем программный код, приведенный в листинге 13.12.

Листинг 13.12. Формирование Web-страницы, получающей данные

// Данная Web-страница получает имя пользователя и адрес его электронной почты от Web-формы

// ishod.htm и отображает эти данные на странице

using System;

// Другие директивы using удалены, поскольку они не используются в данной программе

namespace Передача

{

public partial class res : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

// Page.Title = "Прием данных от страницы ishod.htm";

string Метод = Request.HttpMethod;

string Имя = Request.Form.Get("name");

string Почта = Request.Form.Get("email");

Response.Write("Передача данных произвeдена методом " + Метод + @"
"); Response.Write("Получено имя: " + Имя + @"
");

Response.Write("Получен адрес электронной почты: " + Почта);

}

}

}

Как видно из программного кода, при обработке события загрузки страницы гние переданных данных организуем с помощью методов класса Request. Фрагмент работы Web-страницы представлен на рис. 13.18.



Рис. 13.18. Отображение данных формы на новой странице

Убедиться в работоспособности данного проекта можно, открыв решение Пе­редача.sln в папке Передача.

Пример 99. Передача значений элементов управления на другую Web-страницу с помощью объекта PreviousPage

Покажем, как можно решить задачу из предыдущего примера методами объектa PreviousPage. Итак, на начальной Web-странице имеем командную кнопку ПЕРЕХОД и текстовое поле, которое заполняет пользователь. После щелчка на кнопке происходит переход на другую Web-страницу. На новой странице отображается содержимое текстового поля и надпись на кнопке из предыдущей страницы. Для решения этой задачи запустим Visual Studio 2010, закажем новый проект из шаблона Empty ASP.NET Web Application. Далее добавим в текущий проект начальную Web-форму, для этого в пункте меню Project выполним команду Add New Item и в появившемся окне выберем шаблон Web Form. В окне Solution Explorer переименуем (команда Rename в контекстном меню) новую появившуюся форму из WebForm1.aspx в ishod.aspx. На вкладке конструктора формы из раздела Standard панели элементов Toolbox перенесем командную кнопку Button и тек-стовое поле TextBox. На вкладке программного кода (клавиша <F7>) напишем текст, приведенный в листинге 13.13.

Листинг 13.13. Заполнение данных на первой Web-странице

// На начальной Web-странице имеем командную кнопку "ПЕРЕХОД" и текстовое поле которое заполняет пользователь. //После щелчка на кнопке происходит переход на другую Web-страницу. На новой странице отображается содержимое

// текстового поля и надпись на кнопке из предыдущей страницы

using System;

// Другие директивы using удалены, поскольку они не используются в данной программе

namespace Передача2

{

public partial class ishod : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

Button1.Text = "ПЕРЕХОД"; Button1.PostBackUrl = "res.aspx";

}

protected void Button1_Click(object sender, EventArgs e)

{

// Response.Redirect ("res .aspx") ;

}

}

}

Как видно из программного кода, при обработке события загрузки формы при­сваиваем надписи на кнопке строку "ПЕРЕХОД", а свойству кнопки 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.

1   ...   17   18   19   20   21   22   23   24   ...   31


написать администратору сайта