</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 |


