ASP.Net中DataGrid翻页后继续保持(当前排序)显示

    技术2022-05-11  77

    要想实现翻页后继续排序,实现这样的效果:比如共 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) {           //异常 }}

     

    谢谢阅读! 


    最新回复(0)