Включение режима 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.

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

Этап 6. Разработка сценариев добавления, редактирования и удаления данных

Начинаем разрабатывать рабочее место для сотрудника отдела комплектования. Главная страница будет выглядеть следующим образом (вспомним, что повторяющиеся элементы интерфейса можно поместить в мастер-страницу):

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

Управление издателями и категориями

Начнем с пунктов «Издатели» и «Категории». В базе данных структура этих объектов простая – они содержат только номер и название. Поэтому рассмотрим подробнее только сценарий для редактирования издателей.

Создадим сценарий Publishers.aspx. Добавим объект SQLDataSource, сразу же щелкнем по гиперссылке Configure Data Source и займемся настройкой источника данных.

На первой странице выберем строку подключения ConnectionString.

На второй странице построим запрос SELECT * FROM [publishers] и не забудем нажать на кнопку Advanced. Появится окно, в котором обязательно надо выбрать режим «Generate Insert, Update and Delete statements» для того, чтобы SQL-команды были сгенерированы автоматически.

На третьей странице можно протестировать полученный запрос на выборку и нажать кнопку Finish. Источник данных подготовлен.

Теперь подумаем о визуальном представлении издателей. На форму поместим объект GridView. Назначим ему только что созданный источник данных.

Займемся настройкой столбцов GridView. Выберем в контекстном меню Show smart tagEditColumns. Если никакие столбцы не выбраны, можно щелкнуть по гиперссылке Refresh Schema, затем выбрать столбцы id_publ и name_publ, а, кроме того, в секции CommandField выбрать элементы «Edit, Update, Cancel» и «Delete». В таблице появятся два дополнительных столбца с гиперссылками для редактирования и удаления строк. По умолчанию появляются именно гиперссылки, но можно поменять их тип ButtonType на значение Button (кнопка). Изменим всевозможные надписи на русские.

Так выглядит интерфейс для редактирования строки (он создается автоматически):

Столбец «Delete» мы преобразуем в шаблон с помощью гиперссылки «Convert this field into a Template Field». После этого для кнопки «Удалить» можно будет назначить клиентский обработчик: свойству OnClientClick нужно присвоить значение

return confirm('Вы уверены?');

для того чтобы в браузере на клиентской стороне при нажатии на эту кнопку появлялось окно предупреждения:

Наконец, разместим на странице текстовое поле и кнопку «Добавить» для создания новых издателей. Подправим свойство InsertQuery в SQLDataSource1, чтобы параметр запроса был связан с этим текстовым полем и назначим на кнопку обработчик для обновления GridView1:

protected void Button2_Click(object sender, EventArgs e)

{

SqlDataSource1.Insert();

GridView1.DataBind();

}

Интерфейс для управления издателями готов. Таким же образом создадим сценарий Categories.aspx для редактирования категорий книг:

Регистрация новых книг

Теперь создадим сценарий NewBook. aspx для регистрации новых книг:

Как обычно, прежде всего, поместим на форму источники данных (здесь нам нужно три источника).

SQLDataSource1 предназначен для добавления книги в таблицу базы данных, поэтому щелкнем по гиперссылке Configure Data Source и займемся настройкой. На второй странице настройки построим запрос SELECT * FROM [books] и не забудем нажать на кнопку Advanced. Появится окно, в котором обязательно надо выбрать режим «Generate Insert, Update and Delete statements» для того, чтобы SQL-команды были сгенерированы автоматически.

Источники данных SQLDataSource2 и SQLDataSource3 предназначены только для формирования списков издателей и категорий, зададим для них запросы

SELECT * FROM [publishers] и SELECT * FROM [categories]

Теперь поместим на форму элемент управления FormView из группы Data. Зададим для него параметр DefaultMode=Insert (т. е., по умолчанию будет показана форма для добавления записи).

Для редактирования полей формы следует выбрать в контекстном меню Edit TemplateInsertItemTemplate.

Для полей «Тип», «Категория» и «Издательство» нам понадобятся списки. Поэтому удалим сгенерированные автоматически на их месте текстовые поля и добавим элементы управления DropDownList из секции Standard.

Список для указания типа книги формируется из фиксированных значений (1–учебная, 0–прочая). Поэтому следует выбрать свойство Item списка и добавить два элемента со свойствами: Text=учебная, Value=1; Text=прочая, Value=0.

Списки издательств и категорий должны заполняться значениями из базы данных, поэтому у этих списков нужно настроить источник данных (например, DataSourceID=SQLDataSource2), имя столбца для строк списка (например, DataTextField=name_publ) и имя столбца для значений списка (например, DataValueField=id_publ).

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

<asp:DropDownList...> </asp:DropDownList>

и задать в нем атрибут

SelectedValue = '<%# Bind("id_publ")%>'>

То же самое можно получить, если в контекстном меню для списка найти строку «Edit Data Binding», выбрать режим «Custom Binding» и в поле «Code Expression» указать Bind("id_publ").

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

Поиск книг и создание экземпляров

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

В базе данных создадим представление 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, поскольку через представление, состоящее из нескольких таблиц, удаление сделать нельзя.

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