Я хочу использовать Pagination и кэшировать результат поиска, когда некоторые страницы меняются. У меня есть страница транзакции, которая по умолчанию загружает 100 последних транзакций. Однако пользователь может нажать ссылку «Поиск», которая отобразит критерии поиска, и страница будет извлекать этот конкретный набор данных.ASP.NET Gridview пейджинг и кеширование
Я добавил разбивку на страницы в свой GridView и показывает правильное количество страниц на основе поля размера страницы.
Моя задача - получить набор данных для страниц GridView после того, как пользователь нажимает на номер страницы. Загрузка страницы по умолчанию или через поиск пользователя. Отображается сетка. Теперь, скажем, пользователь хочет перейти на вторую страницу. Как я к этому подхожу?
Вот что я пробовал:
Функция загрузки страницы вызывает() Заполнить ниже. Я добавил глобальную переменную DataSet, pagingQuery, чтобы сохранить критерии поиска. В populate() я устанавливаю pagingQuery на то, что я извлекаю из db. Однако эта переменная получает значение null после загрузки страниц! Зачем? В PageIndexChanging() я просто сделать
protected void GridView1_PageIndexChanging(object sender,GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
//Populate();
GridView1.DataSource = pagingQuery;
GridView1.DataBind();
}
public void Populate()
{
try
{
Transaction tran = new Transaction();
//DataSet ds = tran.GetAllBankTransactions();
pagingQuery = tran.GetAllBankTransactions();
GridView1.DataSource = pagingQuery;
GridView1.DataBind();
}
catch{
}
}
Для критериев поиска следует подобный подход, но безрезультатно. Значение равно null, и любая последующая страница пуста. Мне удалось получить Pagination для работы, снова вызвав populate() с локальной переменной DataSet ds, однако я не могу сделать то же самое для поиска , поскольку сохранение глобального значения для критериев поиска терпит неудачу. Я мог бы сохранить текст поиска и снова вызвать db, но я не могу хранить глобальную переменную.
Является ли мой подход точным? Есть ли способ сохранить DataSet/строку/переменную между вызовами pageIndexChanging()?
protected void Search_button_click(object sender, EventArgs e)
{
try
{
....
else if (ddSearhField.SelectedValue == "Bank" && ddSearchFieldValue.SelectedValue != "All Banks")
{
pagingQuery = trans.GetAllBankTransactionsByBank(Convert.ToInt64(ddSearchFieldValue.SelectedValue), strFromDate, strToDate, showAllFields);
GridView1.DataSource = pagingQuery;
GridView1.DataBind();
lblHeading.Text = ddSearchFieldValue.SelectedItem.Text;
}
...
}
}