Чтобы продолжить сортировку после перелистывания страницы, добейтесь такого эффекта:
Например, всего записей 15, и на каждой странице отображается по 10 записей
. При сортировке: первые 10 записей сортируются на первой странице, а следующие пять записей. сортируются отдельно при перелистывании второй страницы.
Обратите внимание на следующие моменты:
1. Если данных много, лучше не помещать набор данных в кэш (viewstate), это повлияет на производительность
. ViewState сохраняет последнее e.expression и указывает, находится ли e.expression в порядке возрастания или убывания.
Примеры:
1. Существующее событие сортировки записывается следующим образом. Оно используется при нажатии на заголовок сортировки выше:
Private void. grdProjTrace_SortCommand (источник объекта, DataGridSortCommandEventArgs e)
{
this.grdProjTrace.CurrentPageIndex = 0;
DataView dv = получить код данных;
строка strSort = "";
string strOrder = ""; // Метод сортировки. 0, порядок убывания, 1 порядок возрастания if(ViewState["SortExpresstion"] != null)
{
strSort = ViewState["ВыражениеСортировки"].ToString();
стрСорт = стрСорт.Подстрока(0,стрСорт.Длина -1);
strOrder = ViewState["ВыражениеСортировки"].ToString();
strOrder = strOrder.Substring(strOrder.Length -1);
}
if(e.SortExpression == "ИмяКлиента")
{
if(strSort != "ИмяКлиента")
{
this.ViewState["SortExpresstion"] = ustomerName0";
dv.Sort = "Имя клиента DESC";
}
еще
{
если (strOrder == "0")
{
this.ViewState["SortExpresstion"] = "ИмяКлиента1";
dv.Sort = "Имя клиента ASC";
}
еще
{
this.ViewState["SortExpresstion"] = "CustomerName0";
dv.Sort = "Имя клиента DESC";
}
}
}
if(e.SortExpression == "полное имя")
{
if(strSort != "полноеИмя")
{
this.ViewState["SortExpresstion"] = "fullName0";
dv.Sort = "полное имя DESC";
}
еще
{
если (strOrder == "0")
{
this.ViewState["SortExpresstion"] = "fullName1";
dv.Sort = "полное имя ASC";
}
еще
{
this.ViewState["SortExpresstion"] = "fullName0";
dv.Sort = "полное имя DESC";
}
}
}
this.grdProjTrace.DataSource = dv;
this.grdProjTrace.DataBind();
}
2. Следующий метод написан мной и вызывается в событии перелистывания страниц.
частная пустота ChangePageDataBind()
{
DataView dv = получить код данных;
строка strSort = "";
string strOrder = ""; // Метод сортировки. 0, порядок убывания, 1 порядок возрастания if(ViewState["SortExpresstion"] != null)
{
strSort = ViewState["ВыражениеСортировки"].ToString();
стрСорт = стрСорт.Подстрока(0,стрСорт.Длина -1);
strOrder = ViewState["ВыражениеСортировки"].ToString();
strOrder = strOrder.Substring(strOrder.Length -1);
}
if(this.ViewState["SortExpresstion"] != null)
{
if(strSort == "ИмяКлиента")
{
если (strOrder == "1")
{
this.ViewState["SortExpresstion"] = "ИмяКлиента1";
dv.Sort = "Имя клиента ASC";
}
еще
{
this.ViewState["SortExpresstion"] = "CustomerName0";
dv.Sort = "Имя клиента DESC";
}
}
}
if(this.ViewState["SortExpresstion"] != null)
{
if(strSort == "полное имя")
{
если (strOrder == "1")
{
this.ViewState["SortExpresstion"] = "fullName1";
dv.Sort = "полное имя ASC";
}
еще
{
this.ViewState["SortExpresstion"] = "fullName0";
dv.Sort = "полное имя DESC";
}
}
}
this.grdProjTrace.DataSource = dv;
this.grdProjTrace.DataBind();
}
Два вышеуказанных метода можно вызывать напрямую, если имя сортируемого поля изменено.
1. Метод очень простой и практичный, поэтому я не буду вдаваться в подробности.
2. Метод используется следующим образом:
Private void grdProjTrace_PageIndexChanged(источник объекта, DataGridPageChangedEventArgs e)
{
пытаться
{
пытаться
{
this.grdProjTrace.CurrentPageIndex = e.NewPageIndex;
}
ловить
{
this.grdProjTrace.CurrentPageIndex = 0;
}
this.ChangePageDataBind();
}
улов (System.Exception errWS)
{
//аномальный}
}