| Латвия, Рига |
Управление Web-элементами в ASP.NET
Упражнение 7. Привязка Web-элементов управления к базе данных
Для выполнения этого упражнения понадобиться запущенный SQL-сервер и прилагаемая к нему учебная база данных Northwind.
Этап проектирования
-
Создайте
новую страницу с отделенным кодом и именем Page7.aspx и
сделайте ее текущей -
Разместите
на странице таблицу для позиционирования элементов и поместите
в нее список DropDownList и
текстовую метку Label из
вкладки Standard панели Toolbox,
как показано ниже
-
Интерфейсная
часть страницы определяется кодом
<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="Page7.aspx.cs" Inherits="Page7" %>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server" method="post">
<h1 align="center">
Соединение раскрывающегося списка с базой данных Northwind
</h1>
<p align="center">
Выделите элемент в списке и получите дополнительные сведения
</p>
<table align="center" border="1" width="100%">
<tr>
<td align="center" style="width: 474px">
<asp:DropDownList ID="ProductsList" runat="server"
AutoPostBack="True" Width="100%">
</asp:DropDownList>
</td>
<td align="right" style="width: 400px">
<p align="right">
Запасы выделенного товара:
</p>
</td>
<td align="left" style="width: 287px">
<asp:Label ID="ProductSelection" runat="server" Font-Bold="True">
</asp:Label>
</td>
</tr>
</table>
</form>
<hr>
<center>
<a href="Page6.aspx">Назад</a>
<a href="Page8.aspx">Вперед</a>
</center>
</body>
</html>
Листинг
4.14.
Интерфейсная часть страницы Page7.aspx
Этап программирования
-
Создайте
обработчик события SelectedIndexChanged для
элемента управления "раскрывающийся список", перейдите
в файл Page7.aspx.cs и
откорректируйте его так
using System;
using System.Data;
using System.Web.UI.WebControls;
public partial class Page7 : System.Web.UI.Page
{
// Объявляем ссылку на поставщика данных
protected System.Data.SqlClient.SqlDataAdapter DSAdapter;
// Объявляем ссылку на набор данных
protected System.Data.DataSet ProductsData;
// Создаем SQL-команду для выборки данных поставщиком
protected System.String cmd = "SELECT ProductID, ProductName FROM Products";
protected void Page_Load(object sender, EventArgs e)
{
if (this.IsPostBack) return;// Только для инициализации
// Создали поставщик данных с нужными настройками
DSAdapter = new System.Data.SqlClient.SqlDataAdapter(
cmd, "server=localhost; uid=sa; pwd=; database=Northwind");
// Создали набор данных
ProductsData = new DataSet();
// Заполнили набор данными из поставщика
DSAdapter.Fill(ProductsData, "Products");
// Подсоединяем список к набору данных как источнику данных
ProductsList.DataSource = ProductsData.Tables["Products"].DefaultView;
// Указываем, из какой колонки брать видимые тексты элементов списка
ProductsList.DataTextField = "ProductName";
// Указываем, из какой колонки брать невидимые значения элементов списка
ProductsList.DataValueField = "ProductID";
// Заполняем список из присоединенного источника данных ProductsData
ProductsList.DataBind();
// Выводим в текстовую метку выделенное значение
ProductSelection.Text = ProductsList.SelectedItem.Value;
}
protected void ProductsList_SelectedIndexChanged(object sender, EventArgs e)
{
// Выводим в текстовую метку выделенное значение
ProductSelection.Text = ProductsList.SelectedItem.Value;
}
}
Листинг
4.15.
Код файла Page7.aspx.cs
-
Разберитесь
в коде, постройте приложение и проверьте его работу
Для программного подключения к базе необходим запущенный SQL-сервер.
Упражнение 8. Web-элемент AdRotator для управления рекламными баннерами
Элемент AdRotator (Advertisement - рекламные объявления, Rotator - вращатель) предназначен для управления на странице появлением рисунков с рекламными объявлениями - баннеров. При каждом новом обращении к серверу этот элемент меняет закрепленный за ним рисунок на иной случайным образом с вероятностью, установленной в связанном с элементом конфигурационном файле XML. В таблице приведены свойства и события элемента AdRotator
Для выполнения упражнения с действующим элементом AdRotator используем в качестве баннеров книжного магазина следующие картинки, размещенные в прилагаемом каталоге Source
| 04_29.jpg | 04_30.jpg | 04_31.jpg |
| 04_34.jpg | 04_32.jpg | 04_33.jpg |
Этап проектирования
-
Добавьте
к проекту в каталог Resources из прилагаемого каталога Source рисунки с баннерами книжного магазина
-
Создайте
новую страницу Page8.aspx с
отделенным кодом и сделайте ее стартовой -
Поместите
на страницу элемент управления AdRotator из
вкладки Standard панели Toolbox и текстовую метку Label
-
Добавьте
к странице ссылки на соседние страницы -
Скомпонуйте
интерфейсную часть страницы в соответствии с рисунком
-
Назначьте
для объекта AdRotator значения свойств: ID=BooksRotator, AdvertisementFile=books.xml, а для текстовой
метки ID=AdCaption
После выполнения указанных действий код интерфейсной части страницы Page8.aspx должен стать таким
<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="Page8.aspx.cs" Inherits="Page8" %>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server" method="post">
<h1 align="center">
Испытание элемента AdRotator
</h1>
<p align="center">
Обновляйте страницу и считайте частоту смены баннеров
</p>
<table align="center" border="1" width="100%">
<tr>
<td align="center">
<asp:AdRotator ID="BooksRotator" runat="server"
AdvertisementFile="books.xml" />
<br>
<asp:Label ID="AdCaption" runat="server">Label</asp:Label>
</td>
</tr>
</table>
</form>
<hr>
<center>
<a href="Page7.aspx">Назад</a>
<a href="Page9.aspx">Вперед</a>
</center>
</body>
</html>
Листинг
4.16.
Код интерфейсной части страницы Page8.aspx
-
Через
главное меню оболочки Website/Add New Item добавьте
к проекту новый пустой XML-файл с именем books.xml
<?xml version="1.0" encoding="utf-8" ?> <Advertisements> <Ad> <ImageUrl>Resources/04_29.jpg </ImageUrl> <NavigateUrl>Details.htm#04_29.jpg </NavigateUrl> <AlternateText>Баннер для программирования Active Server Pages 3.0</AlternateText> <Keyword>web</Keyword> <Impressions>50</Impressions> <PercentOff>10</PercentOff> <Caption>Книги по технологии программирования 04_29.jpg.0</Caption> </Ad> <Ad> <ImageUrl>Resources/04_30.jpg </ImageUrl> <NavigateUrl>Details.htm#html</NavigateUrl> <AlternateText>Баннер для программирования html</AlternateText> <Keyword>web</Keyword> <Impressions>50</Impressions> <PercentOff>20</PercentOff> <Caption>Книги по использованию языка html</Caption> </Ad> <Ad> <ImageUrl>Resources/04_32.jpg</ImageUrl> <NavigateUrl>Details.htm#linuxprogramming</NavigateUrl> <AlternateText>Баннер для программирования Linux</AlternateText> <Keyword>Linux</Keyword> <Impressions>50</Impressions> <PercentOff>15</PercentOff> <Caption>Книги по программированию Linux</Caption> </Ad> <Ad> <ImageUrl>Resources/04_33.jpg</ImageUrl> <NavigateUrl>Details.htm#linuxsocket</NavigateUrl> <AlternateText>Баннер для программирования Linux Socket</AlternateText> <Keyword>Linux</Keyword> <Impressions>50</Impressions> <PercentOff>50</PercentOff> <Caption>Книги по сокетам Linux</Caption> </Ad> <Ad> <ImageUrl>Resources/04_31.jpg</ImageUrl> <NavigateUrl>Details.htm#java2</NavigateUrl> <AlternateText>Баннер для программирования Java 2</AlternateText> <Keyword>web</Keyword> <Impressions>50</Impressions> <PercentOff>50</PercentOff> <Caption>Книги по программированию на java2</Caption> </Ad> <Ad> <ImageUrl>Resources/04_34.jpg</ImageUrl> <NavigateUrl>Details.htm#xml</NavigateUrl> <AlternateText>Баннер для программирования XML</AlternateText> <Keyword>web</Keyword> <Impressions>50</Impressions> <PercentOff>15</PercentOff> <Caption>Книги по технологии на основе XML</Caption> </Ad> </Advertisements>Листинг 4.17. Файл books.xml кофигурации элемента AdRotator
-
Через
главное меню оболочки Website/Add New Item добавьте
к проекту новый html-файл с именем Details.htm
<html>
<head>
<title>Каталог книг</title>
<meta content="text/html; charset=windows-1251"
http-equiv="Content-Type" />
</head>
<body>
<h1>
<font color="#FF0000">Каталог книг </font>
</h1>
<h2>
<a name="04_29.jpg" ></a>
<font color="#0000FF">Это книги по 04_29.jpg </font></h2>
<p>
<img alt="" src="Resources/04_29.jpg"></p>
<h2>
<a name="html"></a>
<font color="#0000FF">Это книги по html</font></h2>
<p>
<img alt="" src="Resources/04_30.jpg" ></p>
<h2>
<a name="linuxprogramming"></a>
<font color="#0000FF">Это книги по linuxprogramming</font></h2>
<p>
<img alt="" src="Resources/04_32.jpg"></p>
<h2>
<a name="linuxsocket"></a>
<font color="#0000FF">Это книги по linuxsocket</font></h2>
<p>
<img alt="" src="Resources/04_33.jpg"></p>
<h2>
<a name="java2"></a>
<font color="#0000FF">Это книги по java2</font></h2>
<p>
<img alt="" src="Resources/04_31.jpg"></p>
<h2>
<a name="xml"></a>
<font color="#0000FF">Это книги по xml</font></h2>
<p>
<img alt="" src="Resources/04_34.jpg"></p>
</body>
</html>
Листинг
4.18.
html-файл Details.htm
-
Установите
для AdRotator свойство KeywordFilter=web,
тем самым мы установим тематику выборки рисунков, помеченную
свойством Keyword=web в конфигурационном
XML-файле. Только баннеры тематики web будут появляться в
элементе AdRotator
-
Установите
свойство Target=_blank элемента AdRotator,
чтобы при щелчке пользователем по баннеру файл Details.htm загружался
в отдельном окне броузера
Файл Details.htm представляет собой статическую страницу, которая не требует обработки средой ASP.NET. Он служит нам только для иллюстрации появления в отдельном окне броузера более подробной информации, рекламируемой баннером, при выборе пользователем нужного баннера.
Теперь, когда у нас есть конфигурационный XML-файл, мы можем на любую страницу поместить элемент AdRotator и через свойство AdvertisementFile подключить к нему файл конфигурации. При загрузке любой из страниц с этим элементом будет появляться любой баннер из заданной тематики.
Усовершенствование настройки элемента AdRotator
Поставим задачу выводить подписи к рисункам наших баннеров. Для этого нужно воспользоваться событием AdCreated элемента AdRotator и ввести некоторые дополнения в кофигурационный файл этого элемента.
-
Добавьте
в каждый блок описания баннера в файле books.xml элемент <Caption> Некоторый
текст </Caption>, где текст возьмите из таблицы ниже
Можно вставить, например, после элемента <PercentOff> </PercentOff> в конце каждого блока. У нас 6 баннеров, значит в конфигурационном файле 6 блоков и пусть дополнения выглядят так
-
Вызовите
контекстное меню на поле редактирования файла books.xml и
выполните команду View Data Grid, чтобы увидеть представление
конфигурационного XML-файла в табличной форме
-
Выделите
элемент AdRotator и через панель Properties создайте
обработчик события AdCreated, который заполните
следующим кодом
protected void BooksRotator_AdCreated(object sender, AdCreatedEventArgs e)
{
AdCaption.Text = "<b>"
+ "Это рекламный баннер:<br>"
+ e.AdProperties["Caption"]
+ "<br>со скидкой "
+ e.AdProperties["PercentOff"]
+ " %."
+ "</b>";
}
Листинг
4.19.
Обработчик события AdCreated элемента AdRotator в файле Page8.aspx.cs
В теле обработчика мы использовали свойство AdProperties класса AdCreatedEventArgs, экземпляр которого передается через заголовок обработчика. Это свойство является ассоциативным массивом, содержащим все свойства данного баннера, извлеченные из конфигурационного файла. Мы копируем в текстовую метку значения элементов <Caption> и <PercentOff> для текущего баннера, выбранного элементом AdRotator в конфигурационном файле.
-
Постройте
страницу и проверьте введенную функциональность
Экран должен быть примерно таким













