Пинягина о. В
Вид материала | Документы |
СодержаниеСценарий поиска и просмотра книг в АРМ библиотекаря Enable selection Задание для самостоятельной работы. Этап 5. |
Сценарий поиска и просмотра книг в АРМ библиотекаря
Создадим сценарий для поиска книг (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.
Разработайте для вашего приложения страницы поиска и просмотра данных для всех АРМ. В дальнейшем в эти же страницы могут быть добавлены возможности изменения данных.