ASP.Net 翻页后继续维持排序
ASP.Net 翻页后继续维持排序 要想实现翻页后继续排序,实现这样的效果:
比如共 15笔记录,每页显示10条
则排序时:第一页将前10条记录排序,翻第二页时后五条再单独排序.
要注意以下几点:
1. 把数据集放到缓存中,例如: viewstate
2. ViewState中存放上次是哪个e.expression并且存放此e.expression是升序还是降序
示例如下:
1.现有的排序事件是这样写的,这个是点击上面排序标题时用:
private void grdProjTrace_SortCommand(object source, DataGridSortCommandEventArgs e)
{
this.grdProjTrace.CurrentPageIndex = 0;
DataView dv = 得到数据代码;
string strSort = '';
string strOrder ='';//排序方式。0,降序,1升序
if(ViewState['SortExpresstion'] != null)
{
strSort = ViewState['SortExpresstion'].ToString();
strSort = strSort.Substring(0,strSort.Length -1);
strOrder = ViewState['SortExpresstion'].ToString();
strOrder = strOrder.Substring(strOrder.Length -1);
}
if(e.SortExpression == 'CustomerName')
{
if(strSort != 'CustomerName')
{
this.ViewState['SortExpresstion'] = ustomerName0';
dv.Sort = 'CustomerName DESC';
}
else
{
if(strOrder == '0')
{
this.ViewState['SortExpresstion'] = 'CustomerName1';
dv.Sort = 'CustomerName ASC';
}
else
{
this.ViewState['SortExpresstion'] = 'CustomerName0';
dv.Sort = 'CustomerName DESC';
}
}
}
if(e.SortExpression == 'fullName')
{
if(strSort != 'fullName')
{
this.ViewState['SortExpresstion'] = 'fullName0';
dv.Sort = 'fullName DESC';
}
else
{
if(strOrder == '0')
{
this.ViewState['SortExpresstion'] = 'fullName1';
dv.Sort = 'fullName ASC';
}
else
{
this.ViewState['SortExpresstion'] = 'fullName0';
dv.Sort = 'fullName DESC';
}
}
}
this.grdProjTrace.DataSource = dv;
this.grdProjTrace.DataBind();
}
2.下面这个方法是自己写的,翻页事件中调用。
private void ChangePageDataBind()
{
DataView dv = 得到数据代码;
string strSort = '';
string strOrder ='';//排序方式。0,降序,1升序
if(ViewState['SortExpresstion'] != null)
{
strSort = ViewState['SortExpresstion'].ToString();
strSort = strSort.Substring(0,strSort.Length -1);
strOrder = ViewState['SortExpresstion'].ToString();
strOrder = strOrder.Substring(strOrder.Length -1);
}
if(this.ViewState['SortExpresstion'] != null)
{
if(strSort == 'CustomerName')
{
if(strOrder == '1')
{
this.ViewState['SortExpresstion'] = 'CustomerName1';
dv.Sort = 'CustomerName ASC';
}
else
{
this.ViewState['SortExpresstion'] = 'CustomerName0';
dv.Sort = 'CustomerName DESC';
}
}
}
if(this.ViewState['SortExpresstion'] != null)
{
if(strSort == 'fullName')
{
if(strOrder == '1')
{
this.ViewState['SortExpresstion'] = 'fullName1';
dv.Sort = 'fullName ASC';
}
else
{
this.ViewState['SortExpresstion'] = 'fullName0';
dv.Sort = 'fullName DESC';
}
}
}
this.grdProjTrace.DataSource = dv;
this.grdProjTrace.DataBind();
}
上面两方法只要修改要排序的字段名,就可以直接调用了.
1方法很简单使用,这里就不说了.
2方法是这样用的:
private void grdProjTrace_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
{
try
{
try
{
this.grdProjTrace.CurrentPageIndex = e.NewPageIndex;
}
catch
{
this.grdProjTrace.CurrentPageIndex = 0;
}
this.ChangePageDataBind();
}
catch(System.Exception errWS)
{
//异常
}
}