Перед вами третий выпуск рассылки сайта Путь к
.NET, посвященной, технологии .NET.
Сразу хочу попросить прощения перед теми читателями, кто читает этот выпуск с
разрешением 800x600. Просто пример кода использования шаблонов в DataGrid
достаточно большой. Я долго колебался, что выбрать: читаемость примера или
возможность его полного размещения на экране монитора с разрешением 800x600. В
итоге выбрал читаемость.
Что будет в рассылке
Свои мысли, замечания и идеи по поводу рассылки вы можете присылать на мой
ящик: daoto@daoto.net.
Мысли вслух
1. Кеширование aspx-страниц (ASP.NET).
Для управления кешированием страниц в ASP.NET-приложении преднизначен класс
HttpCachePolicy. Получить ссылку на объект этого класса можно с помощью
свойства Cache. Второй способ - это использование директивы OutputCache
aspx-страницы. Например, зададим время кеширование страницы - 2 минуты.
Время хеширования определяется с помощью атрибута Duration. Его использование
является обязательным. Эта страница будет кешироваться 2 минуты на сервере и на
клиенте. Место кеширования страницы определяется с помощью атрибута Location.
По умолчанию, его значение - "Any", что означает, что страница будет
кешироваться, где только возможно. Все возможные значения параметра Location
приведены в таблице:
Значение
Описание
Any
Страница будет кешироваться везде где это возможно - в браузере клиента, на
прокси-сервере, или любом другом сервере, отправляющем запрос, на web-сервере,
обрабатывающем запрос
Client
Страница будет кешироваться только в браузере клиента
Downstream
Страница будет кешироваться на сервере, отправляющем запрос (прокси-сервер и
т.д.)
None
Страница не будет кешироваться
Server
Страница будет кешироваться на web-сервере, обрабатывающем запрос.
Для современного интернета является стандартной ситуация, когда содержание
страницы меняется в зависимости от передаваемых ей параметров методами POST или
GET. Атрибут VaryByParam позволяет сохранять в кеше страницы в зависимости
от передаваемых ей параметров. В следующем примере на сервере будут
кешироваться все варианты страницы в зависимости от передаваемых значений
параметра sql:
(И опять насчет обязательных парамеров - попробуйте опустить атрибут VaryByParam
- узнаете, что он тоже обязательный). Для указания нескольких параметров их
можно разделить точкой с запятой (;). Либо можно задать кеширование страницы в
зависимости от значений всех передаваемых параметров, использовав сисмвол "*":
<!-- Кеширование в зависимости от значений параметров id и sql -->
<%@ OuputCache Duration="120" Location="Server" VaryByParam = "sql;id"%>
<!-- Кеширование в зависимости от значений всех параметров -->
<%@ OuputCache Duration="120" Location="Server" VaryByParam = "*"%>
Кроме этих атрибутов существуют еще атрибуты - VaryByHeader - позволяющие
кешировать в зависимости от значений HTTP - заголовка и VaryByCustom -
позволяющие кешировать страницы в зависимости от параметров, определенных
разработчиками.
2. Использование шаблонов редактирования в серверном элементе управления
DataGrid (ASP.NET + ADO.NET).
Во втором выпуске рассылки мы начали рассмотрение использования шаблонов в
серверном элементе управления DataGrid. Тогда мы их использовали для просмотра
табличных данных. Сейчас мы рассмотрим их применение для редактирования
табличных данных.
Выпуск 2-ой
рассылки ("Использование шаблонов в серверном элементе управления
DataGrid для отображения данных" и "Хранение строк подключения в приложениях
ASP.NET").
Итак, предпологая, что вы читали второй выпуск рассылки (Использование шаблонов
в серверном элементе управления DataGrid для отображения данных"), если
нет, то вы можете это сделать сейчас, приступим к продолжению рассмотрения
шаблонов в серверном элементе управления DataGrid.
Для задания шаблонов редактирования мы будем использовать атрибут
<EditItemTemplate></EditItemTemplate>. Кроме того, для
создания столбцов с кнопками редактирования (Edit, Update, Cancel,
Delete) мы будем использовать элементы
управлению <asp:CommandColumn/> и <asp:EditCommandColumn>.
Столбцы с кнопками можно добавить дибо вручную, либо в VS .NET с помощью
диалогового окна Property Builder элемента управления DataGrid (правой кнопкой
мыши по DataGrid в дизайнере и выбрать соответствующий пункт контекстного
меню).
В этом невидимом столбце хранятся значения ключевого поля id_author. Это
необходимо при определении ключа удаляемой строки. Честно говоря, я как-то уже
не помню, почему стал применять это скрытое поле - то-ли прочитал где-то, то-ли
горький опыт.
Следующее что необходимо сделать - это добавить обработчики событий серверного
элемента управления DataGrid - EditCommand, UpdateCommand, CancelCommand,
DeleteCommand. Это можно сделать с помощью окна Properties, на закладке с
молнией, где определяются обработчики событий.
А вот и сам код обработчиков:
/// <summary>
/// Обновление данных страницы
/// </summary>
protected void UpdateData()
{
conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
comm = new SqlCommand();
comm.Connection = conn;
comm.CommandText = "SELECT * FROM Authors";
try
{
conn.Open();
dataGrid.DataSource = comm.ExecuteReader();
this.DataBind();
}
catch(Exception ex)
{
lbMessage.Text = ex.Message;
}
finally
{
conn.Close();
}
}
/// <summary>
/// Редактирование данных автора
/// </summary>
private void dataGrid_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{ //устанавливаем выбранную строку //в режим редактирования
dataGrid.EditItemIndex = e.Item.ItemIndex;
this.UpdateData();
}
/// <summary>
/// Удаление данных автора
/// </summary>
private void dataGrid_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
comm = new SqlCommand("sp_DaoSql_DeleteAuthors", conn);
comm.CommandType = CommandType.StoredProcedure;
comm.Parameters.Add("@id_author", SqlDbType.VarChar, 20);
comm.Parameters["@id_author"].Value = e.Item.Cells[0].Text;
try
{
conn.Open();
comm.ExecuteNonQuery();
}
catch(Exception ex)
{
lbMessage.Text = ex.Message;
}
finally
{
conn.Close();
}
this.UpdateData();
}
/// <summary>
/// Отмена редактирования данных автора
/// </summary>
/// <param name="source"></param>
/// <param name="e"></param>
private void dataGrid_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{ //устанавливаем, что в режиме редактирования //не находится никакая из строк
dataGrid.EditItemIndex = -1;
this.UpdateData();
}
Код достаточно очевиден. Единственное, что отмечу - это dataGrid.EditItemIndex -
устанавливает индекс строки dataGrid, находящейся в режиме редактирования. Если
присвоить -1, то никакая строка не будет находиться в режиме редактирования.
Приведу еще код хранимых процедур, используемых в этом примере:
--Обновить данные автора
CREATE PROC sp_DaoSql_UpdateAuthors
@id_author varchar(20),
@email varchar(50),
@page varchar(50),
@name varchar(50),
@surname varchar(50),
@fatherName varchar(50),
@icq int,
@description varchar(500)
AS
UPDATE Authors
SET email = @email,
page = @page,
[name] = @name,
surname = @surname,
fatherName = @fatherName,
icq = @icq,
[description] = @description
WHERE id_author = @id_author
--удаление данных автора
CREATE PROC sp_DaoSql_DeleteAuthors
@id_author varchar(20)
AS
DELETE Authors
WHERE id_author = @id_author
.
3. Пример создания статистики сайта (ASP.NET + ADO.NET).
Итак перед нами стоит небольшая задача - создать собственную статистику сайта.
Информация, которую нам необходимо собрать стандартна для статистик сайта:
Время визита
Адрес посетителя
Запрашиваемая страница
Параметры запроса
Метод запроса (GET, POST)
Предыдущий адрес (откуда пришел)
Браузер посетителя
Создадим сначала таблицу в которой будут храниться все эти данные:
Вместо того, чтобы вставлять код учета посещаемости сайта в код каждой страницы
воспользуемся методом Application_BeginRequest() (Global.asax.cs). Код этогом
метода будет выполняться в начале каждого запроса (событие Начало зарооса).
Необходимы данные будем получать из объекта Request (запрос):
В этой статье рассмотрены классы пространства имен System.Data - DataColumn, DataRow, DataTable, DataSet - предназначенные для работы с отсоедененными данными. Во второй части мы рассмотрим работу со строками DataRow. Создание, изменение и удаление строк. Выборка строк по из таблицы DataTable по каким-либо параметрам.
В этой статье рассмотрены классы пространства имен System.Data - DataColumn, DataRow, DataTable, DataSet - предназначенные для работы с отсоедененными данными. Во второй части мы рассмотрим работу со строками DataRow. Создание, изменение и удаление строк. Выборка строк по из таблицы DataTable по каким-либо параметрам.
1. Использование шаблонов в серверном элементе управления DataGrid для отображения данных (ASP.NET). 2. Выполнение запросов DataAdapter в контексте транзакции (ADO.NET). 3. Хранение строк подключения в приложениях ASP.NET.
PARKING.RU
Качественный ВИРТУАЛЬНЫЙ ХОСТИНГ на платформе Windows(r): поддержка
.NET, многофункциональная панель управления, аренда
бизнес-приложений, сертифицированные специалисты. http://www.parking.ru/hosting.asp