protected void DetailsView1_DataBound(object sender,

EventArgs e)

{

try

{

Session. Add("id_reader",

DetailsView1.Rows[0].Cells[1].Text);

Session. Add("fio_reader", "Читатель: "

+DetailsView1.Rows[1].Cells[1].Text);

txt_search_ID. Text=Session["id_reader"].ToString();

}

catch (Exception ex)

{

}

}

Обратите внимание, как извлекаются данные из DetailsView. Номер билета берем из нулевой строки, первого столбца, ФИО – из первой строки, первого столбца. Для удобства будем выводить ФИО найденного читателя сразу же после линейки меню. Для этого в мастер-страницу поместим строку:

<%=Session["fio_reader"]%>

Далее добавим в карточку читателя информацию о его заявках на книги, о взятых и возвращенных книгах.

Прежде всего, для удобства выборки информации из разных таблиц создадим три представления непосредственно в базе данных.

Представление vw_orders содержит информацию о еще не выполненных заявках (дата выдачи пустая). Выборка отсортирована в порядке убывания даты заявки.

SELECT dbo. books. ISBN, dbo. books. name_book, dbo. items. id_item,

dbo. orders. date_order, dbo. books. author,

dbo. orders. id_reader, dbo. items. status,

dbo. orders. id_order

FROM dbo. orders INNER JOIN dbo. items

ON dbo. orders. id_item = dbo. items. id_item

INNER JOIN dbo. books

ON dbo. items. ISBN = dbo. books. ISBN

WHERE (dbo. orders. date_get IS NULL)

ORDER BY dbo. orders. date_order DESC

Представление vw_given содержит информацию о книгах, которые находятся на руках у читателей: (дата выдачи непустая, дата возврата пустая). Выборка отсортирована в порядке убывания даты выдачи.

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

SELECT dbo. items. id_item, dbo. orders. id_reader,

dbo. books. name_book, dbo. books. author,

dbo. orders. date_get, dbo. books. ISBN, dbo. orders. id_order

FROM dbo. items INNER JOIN dbo. orders

ON dbo. items. id_item = dbo. orders. id_item

INNER JOIN dbo. books

ON dbo. items. ISBN = dbo. books. ISBN

WHERE (dbo. orders. date_return IS NULL)

AND (dbo. orders. date_get IS NOT NULL)

ORDER BY dbo. orders. date_get DESC

Представление vw_returned содержит информацию о книгах, которые возвращены читателями: (дата возврата непустая). Выборка отсортирована в порядке убывания даты выдачи.

SELECT dbo. books. ISBN, dbo. books. name_book, dbo. books. author,

dbo. items. id_item, dbo. orders. date_get,

dbo. orders. date_return, dbo. orders. id_reader,

dbo. orders. id_order

FROM dbo. books INNER JOIN dbo. items

ON dbo. books. ISBN = dbo. items. ISBN

INNER JOIN dbo. orders

ON dbo. items. id_item = dbo. orders. id_item

WHERE (dbo. orders. date_return IS NOT NULL)

ORDER BY dbo. orders. date_get DESC

На основе каждого из представлений создадим источник данных SQLDataSource. Нас интересуют книги конкретного читателя, поэтому в источнике данных при построении запроса в свойстве SelectQuery зададим параметр id_reader, который свяжем с элементом управления DetailsView1 и добавим соответствующее условие в запрос:

SELECT vw_given.* FROM vw_given WHERE (id_reader=@id_reader)

Кроме того, у элемента управления DetailsView1 нужно явно указать ключевые поля из источника данных: назначим свойство DataKeyNames=id_reader.

Теперь можно выводить информацию из источников данных на страницу. Для этого будем использовать элементы управления типа GridView, которые представляют данные в табличной форме. У этих элементов обязательно нужно назначить источник данных: свойство DataSourceID связать с соответствующим объектом типа SQLDataSource.

Для настройки отдельных столбцов таблицы используйте свойство Columns и соответствующий построитель. Здесь в визуальном режиме можно настроить список столбцов, задать их порядок, заголовки и прочие свойства.

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

Наконец, для более компактного размещения информации будем выводить на экран только один из объектов GridView. Для этого у всех объектов GridView назначим по умолчанию свойство Visible=false. Затем в нижнем колонтитуле объекта DetailsView1 (в шаблоне Footer Template) поместим три кнопки: «Заявки», «Книги выданные», «Книги возвращенные». Обработчик соответствующей кнопки делает видимым одну из таблиц и делает невидимыми две остальные:

protected void Button1_Click(object sender, EventArgs e)

{

GridView1.Visible = true;

GridView2.Visible = false;

GridView3.Visible = false;

}

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

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

Поскольку нам нужно выбирать информацию сразу из нескольких таблиц, создадим, как обычно, представление в базе данных. Назовем его vw_books. Это представление состоит из 5 таблиц и визуально выглядит следующим образом:

А его код представлен следующим запросом:

SELECT dbo. books. ISBN, dbo. books. name_book, dbo. books. author,

dbo. books. price, dbo. books. pages, dbo. books. year,

dbo. books. type, dbo. books. image, dbo. categories. name_cat,

dbo. publishers. name_publ, dbo. items. id_item,

dbo. items. state, dbo. status. name_status, dbo. items. status

FROM dbo. books INNER JOIN dbo. items

ON dbo. books. ISBN = dbo. items. ISBN

INNER JOIN dbo. categories

ON dbo. books. id_cat = dbo. categories. id_cat

INNER JOIN dbo. publishers

ON dbo. books. id_publ = dbo. publishers. id_publ

INNER JOIN dbo. status

ON dbo. items. status = dbo. status. id_status

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

SELECT vw_books.* FROM vw_books WHERE 1!=1

После того как пользователь задаст критерии поиска, ему следует нажать на кнопку «Найти». Серверный обработчик этой кнопки выглядит следующим образом:

protected void Button1_Click(object sender, EventArgs e)

{

bool nodata = true;

SqlDataSource1.SelectCommand = "SELECT * FROM vw_books ";

SqlDataSource1.SelectParameters. Clear();

if (id_item. Text!= "")

{

SqlDataSource1.SelectParameters. Add("id_item",

id_item. Text);

SqlDataSource1.SelectCommand +=

" WHERE id_item=@id_item ";

nodata = false;

}

if (ISBN. Text!= "")

{

SqlDataSource1.SelectCommand +=

nodata? " WHERE " : " AND ";

SqlDataSource1.SelectParameters. Add("ISBN", ISBN. Text);

SqlDataSource1.SelectCommand += " ISBN=@ISBN ";

nodata = false;

}

if (author. Text!= "")

{

SqlDataSource1.SelectCommand +=

nodata? " WHERE " : " AND ";

SqlDataSource1.SelectParameters. Add

("author", author. Text);

SqlDataSource1.SelectCommand += " author=@author ";

nodata = false;

}

if (name_book. Text!= "")

{

SqlDataSource1.SelectCommand +=

nodata? " WHERE " : " AND ";

SqlDataSource1.SelectParameters. Add("name_book",

name_book. Text);

SqlDataSource1.SelectCommand +=

" name_book LIKE '%'+@name_book+'%'";

nodata = false;

}

if (nodata)

{

SqlDataSource1.SelectCommand =

"SELECT * FROM vw_books WHERE 1!=1";

}

}

Рассмотрим код этого обработчика более подробно. В этом обработчике мы явно создаем параметры запроса и добавляем их в коллекцию параметров SelectParameters источника данных.

Обратите внимание, как формируется условие запроса. Дело в том, что оно должно начинаться с ключевого слова WHERE, а если условие составное, то отдельные его части в нашем случае должны быть связаны ключевым словом AND (одновременное выполнение нескольких условий). Для краткости используем тернарный (условный) оператор; вспомним, что он имеет следующий синтаксис:

условие? значение_если_истина : значение_если_ложь

Обратите также внимание на то, как формируется условие поиска по подстроке в названии книги. Здесь мы используем ключевое слово LIKE, а сама подстрока поиска в запросе должна обрамляться слева и справа знаками ‘%’.

Если ни один из критериев поиска не задан, снова формируем запрос с ложным условием:

"SELECT * FROM vw_books WHERE 1!=1"

Теперь можно вывести результаты запроса на экран. Будем использовать элемент управления GridView.

Элементу GridView обязательно нужно назначить источник данных: свойство DataSourceID связать с соответствующим объектом типа SQLDataSource.

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

Зададим в объекте GridView несколько новых для нас свойств. Щелкните по объекту правой кнопкой мыши и в контекстном меню выберите строку Show smart tag. Здесь отметим флажки Enable paging и Enable selection.

Включение режима Enable paging приводит к автоматическому разбиению нашей таблицы на страницы (по умолчанию на странице помещается 10 строк).

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