Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Изменение файла *.aspx
Изменение файла *.aspx
Обновите пользовательский интерфейс исходного файла *.aspx так, как показано на рис. 24.4.
В обработчике события Load страницы настройте GridView на отображение содержимого помещенного в кэш типа DataSet при первом обращении пользователя к странице.
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) {
carsGridView.DataSource = (DataSet)Cache["AppDataSet"];
carsGridView.DataBind();
}
}
Рис. 24.4. Графический интерфейс пользователя для приложения с кэшированием
В обработчике события Click кнопки Добавить эту машину вставьте новую запись в базу данных Cars, используя для этого объект ADO.NET SqlCommand. После добавления записи вызовите вспомогательную функцию RefreshGrid(), которая обновит интерфейс с помощью типа SqlDataReader (поэтому не забудьте указать using для пространства имен System.Data.SqlClient). Вот как должны выглядеть соответствующие методы,
protected void btnAddCar_Click(object sender, EventArgs e) {
// Обновление таблицы Inventory
// и вызов RefreshGrid().
SqlConnection cn = new SqlConnection();
cn.ConnectionString = "User Catalog=Cars;Data Source=(local)";
cn.Open();
string sql;
SqlCommand cmd;
// Вставка нового Car.
sql = string.Format(
"INSERT INTO Inventory(CarID, Make, Color, PetName) VALUES" +
"('{0}', '{1}', '{2} ', '{3}')",
txtCarID.Text, txtCarMake.Text,
txtCarColor.Text, txtCarPetName.Text);
cmd = new SqlCommand(sql, cn);
cmd.ExecuteNonQuery();
cn.Close();
RefreshGrid();
}
private void RefreshGrid() {
// Заполнение таблицы.
SqlConnection cn = new SqlConnection();
cn.ConnectionString = "User Catalog=Cars;Data Source=(local)";
cn.Open();
SqlCommand cmd = new SqlCommand("Select * from Inventory", cn);
carsGridView.DataSource = cmd.ExecuteReader();
carsGridView.DataBind();
cn.Close();
}
Теперь, чтобы проверить использование кэша, запустите два экземпляра вашего Web-браузера и перейдите к этой странице *.aspx. Вы должны увидеть, что оба типа DataGrid отображают одинаковую информацию. В окне одного из экземпляров браузера добавьте новую машину. Очевидно, что в результате вы увидите обновленные данные GridView в окне браузера, который инициировал обращение к источнику данных.
Во втором экземпляре браузера щелкните на кнопке Обновить. Вы не увидите новый элемент, поскольку обработчик события Page_Load читает данные непосредственно из кэша. (Если же вы увидели новые данные, это значит, что уже истекли 15 секунд. Либо печатайте быстрее, либо увеличьте время, в течение которого тип DataSet должен оставаться в кэше.) Подождите несколько секунд и снова щелкните на кнопке Обновить второго экземпляра браузера. Теперь вы должны увидеть новые данные, поскольку время пребывания DataSet в кэше истекло, и целевой метод делегата CacheItemRemovedCallback автоматически обновил тип DataSet, помещенный в кэш.
Как видите, главное преимущество типа Cache заключается в том, что вы получаете возможность ответить на удаление члена. В этом примере вы, конечно, можете избежать использования типа Cache путем чтения данных в обработчике Page_Load() непосредственно из базы данных Cars. Однако теперь вам должно быть ясно, что кэш позволяет автоматически обновлять данные с помощью делегатов .NET.
Замечание. В отличие от типа HttpApplicationState, класс Cache не поддерживает методы Lock() и Unlock(). Так что при необходимости обновить связанные элементы вам придется использовать типы из пространства имен System.Threading или ключевое слово lock C#.
Исходный код. Файлы примера CacheState размещены в подкаталоге, соответствующем главе 24.
- Эффективная работа с временными файлами сортировки
- Единое имя файла параметров InterBase
- Параметры конфигурационного файла InterBase
- 13. Зарабатываем на своих файлах: файлообменники, загружаеми получаем процент за скачивание
- Листинг 15.11. Код для загрузки файла с Web-сервера
- Создание и открытие файла
- Управление файлами занятий
- Добавление, изменение и удаление элементов списка
- Добавление, изменение и удаление столбцов списка
- Добавление и изменение представления списка
- Как изменить имя файла или папки?
- Как создавать комментарии к файлам?