Пинягина о. В

Вид материалаДокументы

Содержание


Сценарий поиска и просмотра книг в АРМ библиотекаря
Enable selection
Задание для самостоятельной работы. Этап 5.
1   ...   5   6   7   8   9   10   11   12   13

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


Создадим сценарий для поиска книг (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.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 строк).

Включение режима Enable selection приводит к появлению в таблице нового столбца с гиперссылками Select. Изменим в построителе свойство этого столбца SelectText на Подробнее... Кроме того, у элемента управления GridView нужно явно указать ключевые поля из источника данных: назначим свойство DataKeyNames=id_item.

Теперь для того чтобы выводить подробную информацию о книге, создадим еще один источник данных SQLDataSource, назначим ему запрос


SELECT ISBN, name_book, author, price, pages, year, type,

name_cat, name_publ, id_item, state, name_status, status

FROM vw_books WHERE (id_item = @id_item)


и обязательно создадим параметр запроса @id_item, связанный с объектом GridView. Для вывода на экран подробной информации из текущей строки создадим объект DetailsView, связанный с этим источником данных. Теперь при щелчке по гиперссылке Подробнее… текущая строка таблицы будет выделяться другим стилем (в нашем случае более темно-серым) и в объект DetailsView будет выводиться подробная информация о книге.




Таким образом, в последних двух параграфах мы рассмотрели совместное использование взаимосвязанных объектов GridView и DetailsView, как в прямом, так и в обратном направлении.


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

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