</head>

<body style="background-image: url(../images/EULA. jpg); background-repeat: repeat-y; background-attachment: scroll; margin-left: 140px;">

<form id="form1" runat="server">

<table width="100%" border="0">

<tr><td align="center" colspan="4">

<div style="font-size: 30pt; font-family:

'Bookman Old Style', 'Book Antiqua', 'Comic Sans MS';">

АРМ "Библиотекарь"

</div>

<div style="font-weight:bold; font-size:larger;

color:blue;">

<%=Profile. PersonalInfo. UserFIO%> </div>

</td></tr>

<tr><td style="width:27%; position:static;

text-align: center;">

<asp:HyperLink ID="HyperLink1" runat="server"

NavigateUrl="RegReader. aspx" style="font-weight: bold; ">

Новый читатель </asp:HyperLink></td>

<td style="width: 27%; position: static;

text-align: center;">

<asp:HyperLink ID="HyperLink2" runat="server"

NavigateUrl="~/librarian/SearchReader. aspx"

style="font-weight: bold; ">

Поиск читателя </asp:HyperLink></td>

<td style="width: 26%; position: static;

text-align: center;">

<asp:HyperLink ID="HyperLink3" runat="server"

NavigateUrl="~/librarian/SearchBook. aspx"

style="font-weight: bold; ">

НЕ нашли? Не то? Что вы ищете?

Поиск книги </asp:HyperLink></td>

<td style="width: 20%; position: static;

text-align: center;">

<asp:HyperLink ID="HyperLink4" runat="server"

NavigateUrl="~/logout. aspx" style="font-weight: bold; ">

Выход</asp:HyperLink></td></tr>

<tr><td colspan="4"><div style="text-align: center;">

<asp:contentplaceholder id="ContentPlaceHolder1"

runat="server">

</asp:contentplaceholder>

</div></td></tr>

</table>

<div style="text-align: center;"><asp:HyperLink ID="HyperLink5"

runat="server" NavigateUrl="~/cabinet. aspx">Личные данные

</asp:HyperLink></div>

</form></body></html>

Обратите внимание на строку

<%=Profile. PersonalInfo. UserFIO%>.

Поскольку с АРМ библиотекаря может работать только авторизованный пользователь, мы для информации выводим на страницу его ФИО из объекта-профиля.

Страница по умолчанию Default. aspx будет выглядеть следующим образом:

<%@ Page Language="C#"

MasterPageFile="~/librarian/MasterPage. master"

AutoEventWireup="true" CodeFile="Default. aspx. cs"

Inherits="librarian_Default" Title="АРМ 'Библиотекарь'" %>

<asp:Content ID="Content1"

ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

<asp:Image ID="Image1" runat="server"

ImageUrl="~/images/pict13_289.jpg" Width="550px" /> </asp:Content>

Задание для самостоятельной работы. Этап 4.

Разработайте для вашего приложения мастер-страницы для всех АРМ. Измените ранее созданные страницы АРМ так, чтобы они использовали мастер-страницы.

Этап 5. Разработка сценариев поиска и просмотра данных

В каждом АРМ так или иначе нужен режим поиска и просмотра данных в разных разрезах. Рассмотрим подробнее сценарии поиска и просмотра данных в АРМ библиотекаря.

Поиск и просмотр читателя в АРМ библиотекаря

Создадим сценарий для поиска читателя SearchReader.aspx, использующий master-страницу для АРМ библиотекаря. Будем искать читателя по номеру его читательского билета или (если он, например, потерял свой читательский билет и забыл его номер) по номеру паспорта.

На странице разместим два текстовых поля (txt_searct_ID и txt_search_pasp) и две кнопки (searchId и searchPasp).

Для доступа к базе данных, как обычно, создадим источник данных типа SQLDataSource. В окне Properties назначим источнику данных в качестве строки соединения ConnectionString ссылку на нашу базу данных ASPNETDB. mdf. C помощью свойства SelectQuery в построителе запросов назначим строку запроса

SELECT readers.* FROM readers where id_reader=@id_reader

Создадим параметр запроса @id_reader и свяжем его с текстовым полем txt_searct_ID.

Поместим на страницу объект DetailesView из группы Data вкладки Tools. Этот объект удобен для вывода подробной информации из одной записи таблицы базы данных. Настроить внешний вид этого объекта можно с помощью многочисленных свойств в окне Properties. Обязательно нужно назначить свойство DataSourceID, т. е., связать с источником данных. Для настройки отдельных полей записи используйте свойство Fields.

Стиль таблицы (цвет, шрифт и т. п.) можно быстро изменить через контекстное меню (правая кнопка мыши) – Auto Format.

Пункт Edit Templates в контекстном меню позволяет также редактировать шаблон верхнего и нижнего колонтитулов объекта (Header Template и Footer Template), а также задать шаблон для пустой выборки (Empty Data Template) – добавим в этот шаблон строку «Читатель не найден!».

Получившийся объект в коде программы выглядит следующим образом:

<asp:DetailsView ID="DetailsView1" runat="server"

AutoGenerateRows="False" CellPadding="4"

DataSourceID="SqlDataSource1" ForeColor="#333333"

GridLines="None" Height="50px" Width="528px">

<FooterStyle BackColor="#5D7B9D" Font-Bold="True"

ForeColor="White" />

<CommandRowStyle BackColor="#E2DED6" Font-Bold="True" />

<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />

<FieldHeaderStyle BackColor="#E9ECF1" Font-Bold="True"

Width="40%" />

<PagerStyle BackColor="#284775" ForeColor="White"

HorizontalAlign="Center"/>

<Fields>

<asp:BoundField DataField="id_reader"

HeaderText="Номер билета"

InsertVisible="False" SortExpression="id_reader" />

<asp:BoundField DataField="fio_reader" HeaderText="ФИО"

SortExpression="fio_reader" />

<asp:BoundField DataField="passport"

HeaderText="Паспорт" SortExpression="passport" />

<asp:BoundField DataField="datebird"

HeaderText="Дата рождения"

SortExpression="datebird" />

<asp:BoundField DataField="addr_reader"

HeaderText="Адрес" SortExpression="addr_reader" />

<asp:BoundField DataField="tel_reader"

HeaderText="Телефон" SortExpression="tel_reader" />

<asp:BoundField DataField="email_reader"

HeaderText="Еmail" SortExpression="email_reader" />

</Fields>

<HeaderStyle BackColor="#5D7B9D" Font-Bold="True"

ForeColor="White" />

<EditRowStyle BackColor="#999999" />

<AlternatingRowStyle BackColor="White" ForeColor="#284775" />

<EmptyDataTemplate>

Читатель не найден!

</EmptyDataTemplate>

</asp:DetailsView>

Наконец, нужно назначить обработчики на кнопки:

protected void searchPasp_Click(object sender, EventArgs e)

{

SqlDataSource1.SelectParameters. Clear();

SqlDataSource1.SelectParameters. Add("passport",

txt_search_pasp. Text);

SqlDataSource1.SelectCommand =

"SELECT readers.* FROM readers WHERE

passport=@passport";

}

protected void searchID_Click(object sender, EventArgs e)

{

try

{

int id = Int32.Parse(txt_search_ID. Text);

SqlDataSource1.SelectParameters. Clear();

SqlDataSource1.SelectParameters. Add("id_reader",

txt_search_ID. Text);

SqlDataSource1.SelectCommand =

"SELECT readers.* FROM readers WHERE

id_reader=@id_reader";

}

catch(Exception ex)

{

SqlDataSource1.SelectCommand =

"SELECT readers.* FROM readers WHERE 1!=1";

}

}

Как видим, в первом обработчике «Поиск по паспорту» мы очищаем список параметров, явно задаем значение параметра поиска @passport и текст команды Select для источника данных – все остальное будет сделано автоматически.

А при поиске по номеру билета возникает следующая проблема: номер билета представляет собой целое число (int), и если пользователь наберет в поле поиска нечисловые символы, то при выполнении Select возникнет исключение (к сожалению, это произойдет за пределами данной функции). Здесь предлагается следующее решение: мы пытаемся преобразовать значение из текстового поля к целому типу, и в случае успеха формируем обычный текст запроса Select. Если же возникло исключение, мы искусственно создаем такой Select, который содержит ложное условие, и выборка будет пустой.

Как только библиотекарь нашел какого-то читателя, он начинает работать с его карточкой. Создадим переменные сессии для имени и номера читателя. Для этого будем использовать объект Session.

Удобнее всего выполнить это действие в тот момент, когда объект DetailsView заполняется данными, а именно в обработчике события DataBound. (Здесь есть еще одна хитрость: скопируем номер читательского билета в поле txt_search_ID, чтобы при дальнейших действиях со страницей не потерять связь с источником данных, которому по умолчанию мы назначили параметр, связанный с этим текстовым полем.)

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14