Обработчик кнопки «Найти» почти без изменений возьмем из сценария поиска книги для библиотекаря.
Для вывода информации о найденных книгах поместим на страницу объект 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;
}
У нас получился довольно сложный интерфейс для поиска и редактирования книг, просмотра и создания экземпляров.
Подумайте, как можно реализовать следующий сценарий, который позволяет выполнять поиск и редактирование экземпляров книг:

Выдача и прием книг
Рассмотрим еще один интересный пример обработки данных. Вернемся в АРМ библиотекаря, к сценарию поиска и просмотра данных читателя. В этом сценарии у нас есть список заявок текущего читателя на книги (объект GridView1). Добавим в него столбец «Select» и переименуем его в «Выдать».
Выдача книги с точки зрения данных приводит к следующим изменениям:
1. Статус книги меняется на значение «на руках» (код=2).
2. У заявки заполняется дата выдачи (сегодняшним днем).
3. В заявке указывается библиотекарь, выдавший книгу.
Эти действия удобно оформить в виде хранимой процедуры, которая в качестве параметров получает номер заявки, номер экземпляра книги и логин библиотекаря:
CREATE PROCEDURE dbo. Give_book
@id_order INT, @id_item INT, @login_give NCHAR(10)
AS
BEGIN
BEGIN TRANSACTION
UPDATE items SET status=2 WHERE id_item=@id_item
UPDATE orders SET date_get=GETDATE(), login_give=@login_give
WHERE id_order=@id_order
COMMIT TRANSACTION
END
RETURN

Теперь назначим обработчик события SelectedIndexChanged объекта GridView1. В этом обработчике мы явно используем типы данных SQLConnection и SQLCommand, поэтому в начале файла следует подключить библиотеку: using System. Data. SqlClient;
protected void Give_Click1(object sender, EventArgs e)
{
Создаем объекты для запуска хранимой процедуры:
SqlConnection conn = new
SqlConnection(SqlDataSource1.ConnectionString);
conn. Open();
SqlCommand cmd = new SqlCommand("Give_book", conn);
mandType = CommandType. StoredProcedure;
В хранимую процедуру нужно передать параметры – номера заявки и экземпляра книги, а также логин библиотекаря. Первые два значения мы «вытаскиваем» из текущей строки GridView1 – это столбцы нулевой и пятый. Логин получаем из информации об авторизованном пользователе.
string id_item = GridView1.SelectedRow. Cells[0].Text;
string id_order = GridView1.SelectedRow. Cells[5].Text;
string login_take =
HttpContext. Current. User. Identity. Name;
cmd. Parameters. AddWithValue("@id_item", id_item);
cmd. Parameters. AddWithValue("@id_order", id_order);
cmd. Parameters. AddWithValue("@login_give", login_give);
cmd. ExecuteNonQuery();
conn. Close();
После выполнения процедуры обновляем список заявок и список выданных книг.
SqlDataSource2.Select(DataSourceSelectArguments. Empty);
GridView1.DataBind();
SqlDataSource3.Select(DataSourceSelectArguments. Empty);
GridView2.DataBind();
}
Подобным же образом можно оформить и прием книг от читателя:

Задание для самостоятельной работы. Этап 6.
Добавьте в ваше приложение возможности редактирования, удаления и добавления данных для всех АРМ. Можете создавать новые страницы или же добавлять новые возможности к сценариям, разработанным ранее. Постарайтесь использовать разные типы визуальных объектов (GridView, DetailsVies, FormView).
Этап 7. Выгрузка и загрузка данных в формате XML
XML является исключительно удобной и гибкой технологией для обмена данными между приложениями. В есть много разнообразных объектов для работы с XML-данными. В нашем проекте мы рассмотрим только два простых примера.
Загрузка данных из XML-файла в базу данных
Пусть в отдел комплектования вместе с новыми книгами присылают XML-документ следующего вида:
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |


