Пинягина о. В
Вид материала | Документы |
СодержаниеПоиск книг и создание экземпляров Delete from Finish. Источник данных подготовлен. Далее поместим на форму объект FormView |
Поиск книг и создание экземпляров
Рассмотрим довольно сложный сценарий, который включает возможности поиска и редактирования книг, а также просмотра и создания экземпляров. Сценарий поиска книг частично будет похож на тот, который мы разрабатывали для библиотекаря. Заметим, что для сотрудника отдела комплектования существует разница между понятиями «Книга» и «Экземпляр».
В базе данных создадим представление vw_books2 с полной информацией о книгах (без информации об экземплярах), которая выбирается из таблиц books, categories и publishers:
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.id_cat,
dbo.books.id_publ, dbo.categories.name_cat,
dbo.publishers.name_publ
FROM dbo.books 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
Как и в сценарии для библиотекаря, поместим на форму текстовые поля для поиска по ISBN, названию и автору. Создадим источник данных SQLDataSource, назначим ему в построителе SelectQuery запрос по умолчанию:
SELECT vw_books2.* FROM vw_books2 WHERE ISBN=@isbn
и свяжем параметр @isbn с текстовым полем для поиска по ISBN.
В построителе DeleteQuery назначим запрос
DELETE FROM books WHERE ISBN=@isbn
Обратите внимание, что последний запрос будет удалять строки непосредственно из таблицы books, поскольку через представление, состоящее из нескольких таблиц, удаление сделать нельзя.
Обработчик кнопки «Найти» почти без изменений возьмем из сценария поиска книги для библиотекаря.
Для вывода информации о найденных книгах поместим на страницу объект GridView и свяжем его с источником данных. Назначим свойство DataKeyNames =ISBN.
Займемся настройкой столбцов GridView. Выберем в контекстном меню Show smart tag – EditColumns. Если никакие столбцы не выбраны, можно щелкнуть по гиперссылке Refresh Schema, затем выбрать нужные, а, кроме того, в секции CommandField выбрать элементы «Select», «Edit, Update, Cancel» и «Delete». В таблице появятся три дополнительных столбца с гиперссылками. Переименуем их в «Экземпляры», «Редактировать» и «Удалить» и преобразуем в шаблоны с помощью гиперссылки «Convert this field into a Template Field». После этого они появятся в списке шаблонов как отдельные элементы.
Для гиперссылки «Удалить» можно будет назначить клиентский обработчик: свойству OnClientClick нужно присвоить значение
return confirm('Вы уверены?');
Для редактирования книги создадим новый источник данных SQLDataSource2 и настроим его напрямую на таблицу books: щелкнем по гиперссылке Configure Data Source и займемся настройкой источника данных.
На первой странице выберем строку подключения ConnectionString.
На второй странице построим запрос SELECT * FROM [books] и не забудем нажать на кнопку Advanced. Появится окно, в котором обязательно надо выбрать режим «Generate Insert, Update and Delete statements» для того, чтобы SQL-команды были сгенерированы автоматически.
На третьей странице можно протестировать полученный запрос на выборку и нажать кнопку Finish. Источник данных подготовлен.
Далее поместим на форму объект FormView. (Для редактирования книги нам нужен только шаблон EditItemTemplate, поэтому все остальные шаблоны можно просто вручную удалить из кода страницы.) По умолчанию назначим свойства Visible=false, DataKeyNames=ISBN.
Как и в сценарии добавления книги, для полей «Тип», «Категория» и «Издательство» нам понадобятся списки. Поэтому удалим сгенерированные автоматически на их месте текстовые поля и добавим элементы управления DropDownList из секции Standard.
Список для указания типа книги формируется из фиксированных значений (1-учебная, 0-прочая). Поэтому следует выбрать свойство Item списка и добавить два элемента со свойствами: Text=учебная, Value=1; Text=прочая, Value=0.
Списки издательств и категорий должны заполняться значениями из базы данных, поэтому у этих списков нужно настроить источник данных (например, DataSourceID=SQLDataSource4), имя столбца для строк списка (например, DataTextField=name_publ) и имя столбца для значений списка (например, DataValueField=id_publ).
Осталось связать все три полученных списка со столбцами таблицы books. Это можно сделать непосредственно в тексте сценария, а можно в контекстном меню для списка найти строку «Edit Data Binding», выбрать режим «Custom Binding» и в поле «Code Expression» указать Bind("id_publ").
Объект FormView1 должен появляться на экране при щелчке на гиперссылке «Редактировать» в GridView1. Поэтому назначим на эту гиперссылку обработчик:
protected void LinkButton3_Click(object sender, EventArgs e)
{
FormView1.Visible = true;
}
Внутри объекта FormView1 есть гиперссылки «Update» и «Cancel». Переименуем их в «Обновить» и «Скрыть» и назначим обработчики:
protected void UpdateButton_Click(object sender, EventArgs e)
{
FormView1.Visible = false;
}
protected void UpdateCancelButton_Click(object sender, EventArgs e)
{
FormView1.Visible = false;
}
Для того чтобы сделанные изменения отображались в GridView1, назначим следующий обработчик на событие Updated объекта-источника данных для FormView1 (здесь мы явно вызываем метод Button1_Click, поскольку именно в нем динамически формируется строка запроса SelectCommand объекта SqlDataSource1):
protected void SqlDataSource3_Updated(object sender, SqlDataSourceStatusEventArgs e)
{
Button1_Click(sender, e);
SqlDataSource1.Select(DataSourceSelectArguments.Empty);
GridView1.DataBind();
}
Далее для просмотра экземпляров книги в базе данных создадим представление vw_items
SELECT dbo.state.name_state, dbo.items.id_item,
dbo.items.ISBN, dbo.status.name_status,
dbo.items.state, dbo.items.status
FROM dbo.items INNER JOIN dbo.state
ON dbo.items.state = dbo.state.id_state
INNER JOIN dbo.status
ON dbo.items.status = dbo.status.id_status
Поместим на форму новый источник данных с SELECT-запросом
SELECT * FROM [vw_items] WHERE ([ISBN] = @ISBN)
и свяжем параметр запроса @ISBN с объектом GridView1.
На основе этого источника данных создадим GridView2 и настроим, как обычно, его внешний вид. И, наконец, разместим на странице объект FormView2 для создания новых экземпляров (его настройка напоминает сценарий создания новых книг).
Для гиперссылки «Экземпляры» в GridView1 зададим обработчик, который делает видимыми список экземпляров и форму для добавления нового экземпляра:
protected void LinkButton1_Click(object sender, EventArgs e)
{
GridView2.Visible = true;
FormView2.Visible = true;
}
У нас получился довольно сложный интерфейс для поиска и редактирования книг, просмотра и создания экземпляров.
Подумайте, как можно реализовать следующий сценарий, который позволяет выполнять поиск и редактирование экземпляров книг: