2012-10-19 57 views
2

我有一个启用排序的GridView。对于单页结果,升序和降序都可以正常工作。但是,当有多个页面时,单独下降效果很好。上升也有效,但当我点击下一页时,它会再次失序。 我不知道问题是因为排序方向还是寻呼。请帮助。 下面是代码:GridView排序升序不起作用

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) 
{ 
    GridView grid = sender as GridView; 
    //Retrieve the table from the session object. 
    DataTable dt = Session["List"] as DataTable; 

    if (dt != null) 
    { 
     //Sort the data. 
     dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression); 
     grid.DataSource = Session["List"]; 
     grid.DataBind(); 
    } 
} 

private string GetSortDirection(string column) 
{ 
    string sortDirection = "ASC";  
    string sortExpression = ViewState["SortExpression"] as string; 
    if (sortExpression != null) 
    { 
     if (sortExpression == column) 
     { 
      string lastDirection = ViewState["SortDirection"] as string; 
      if ((lastDirection != null) && (lastDirection == "ASC")) 
      { 
       sortDirection = "DESC"; 
      } 
     } 
    } 
    // Save new values in ViewState. 
    ViewState["SortDirection"] = sortDirection; 
    ViewState["SortExpression"] = column; 
    return sortDirection; 
} 

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    GridView1.PageIndex = e.NewPageIndex; 
    GridView1.DataSource = bindGridView(); 
    GridView1.DataBind(); 
} 

回答

0

这么多的研究之后,我发现我自己的问题的正确答案。这可能会在未来帮助某人。下面的代码添加到bindGridView()

if (ViewState["sortExpr"] != null) 
{ 
    dv = new DataView(ds.Tables[0]); 
    dv.Sort = (string)ViewState["sortExpr"]; 
} 
else 
    dv = ds.Tables[0].DefaultView; 

#region Sorting 
    protected void Gridview1_Sort(object sender, GridViewSortEventArgs e) 
    { 
     ViewState["sortExpr"] = e.SortExpression + " " + GetSortDirection(e.SortExpression); 
     Gridview1.DataSource = bindGridView(); 
     Gridview1.DataBind(); 
    } 

    private string GetSortDirection(string column) 
    { 
     // By default, set the sort direction to ascending. 
     string sortDirection = "ASC"; 

     // Retrieve the last column that was sorted. 
     string sortExpression = ViewState["SortExpression"] as string; 

     if (sortExpression != null) 
     { 
      // Check if the same column is being sorted. 
      // Otherwise, the default value can be returned. 
      if (sortExpression == column) 
      { 
       string lastDirection = ViewState["SortDirection"] as string; 
       if ((lastDirection != null) && (lastDirection == "ASC")) 
       { 
        sortDirection = "DESC"; 
       } 
      } 
     } 
     // Save new values in ViewState. 
     ViewState["SortDirection"] = sortDirection; 
     ViewState["SortExpression"] = column; 

     return sortDirection; 
    } 
    #endregion 
1

您可以使用一个会话变量来存储最新的排序表达式,当你在网格下一次比较排序的排序表达式使用存储最后一个排序表达式的Session变量的网格。如果列相同,则检查上一个排序的方向并按相反方向排序。

DataTable sourceTable = GridAttendence.DataSource as DataTable; 
DataView view = new DataView(sourceTable); 
string[] sortData = Session["sortExpression"].ToString().Trim().Split(' '); 
if (e.SortExpression == sortData[0]) 
{ 
if (sortData[1] == "ASC") 
{ 
    view.Sort = e.SortExpression + " " + "DESC"; 
    this.ViewState["sortExpression"] = e.SortExpression + " " + "DESC"; 
} 
else 
{ 
    view.Sort = e.SortExpression + " " + "ASC"; 
    this.ViewState["sortExpression"] = e.SortExpression + " " + "ASC"; 
} 
} 
else 
{ 
view.Sort = e.SortExpression + " " + "ASC"; 
this.ViewState["sortExpression"] = e.SortExpression + " " + "ASC"; 
}