Gridview控件排序方向

时间:2011-10-06 14:21:28

标签: asp.net gridview

gridview控件上的默认排序顺序是先升序,然后是降序。现在下面我有代码来改变它。到现在为止还挺好。但是当我再次单击另一列时,它会将排序方向设置为再次升序。无论哪一列,它在每次点击时都会在降序和升序之间切换。现在我真正想要的是第一次点击任何要下降的列,如果我第二次单击任何列(第二次意味着连续),它应该是升序。示例:我有2列,一个是薪水,另一个是年龄。现在我点击salary,第一个排序方向是降序,而不是默认升序(这就是代码所做的)。现在,当我点击年龄时,它将排序方向切换为升序,我希望它在保持不变时再换到另一列,但是我应该再次点击工资第二次,它应该切换到升序(导致降序是第一次点击)。有什么建议吗?

我的代码:

public SortDirection GridViewSortDirection
{
    get
    {
        if (ViewState["sortDirection"] == null) 
            ViewState["sortDirection"] = SortDirection.Ascending;
        return (SortDirection)ViewState["sortDirection"];
    }
    set
    {
        ViewState["sortDirection"] = value; 
    }
}
protected void GridView1_OnSorting(object sender, GridViewSortEventArgs e)
{
    if (ViewState["sortDirection"] == null)
    {
        e.SortDirection = SortDirection.Descending;
    }
    else if (GridViewSortDirection == SortDirection.Ascending)
    {
        e.SortDirection = SortDirection.Descending;
    }
    else if (GridViewSortDirection == SortDirection.Descending)
    {
        e.SortDirection = SortDirection.Ascending;
    }

    GridViewSortDirection = e.SortDirection;
}

1 个答案:

答案 0 :(得分:0)

尝试检查以确定SortExpression是否已从先前设置的SortExpression更改,如果是,则将SortDirection默认为Descending。

protected void GridView1_OnSorting(object sender, GridViewSortEventArgs e)
{
    if (e.SortExpression != GridView1.SortExpression)
    {
        e.SortDirection = SortDirection.Descending;
        GridViewSortDirection = e.SortDirection;
    }
    else if (GridViewSortDirection == SortDirection.Ascending)
    {
        e.SortDirection = SortDirection.Descending;
    }
    else if (GridViewSortDirection == SortDirection.Descending)
    {
        e.SortDirection = SortDirection.Ascending;
    }

    GridViewSortDirection = e.SortDirection;
}