在课堂上排序网格视图

时间:2010-03-12 17:16:02

标签: c# asp.net class gridview viewstate

好吧我有一个项目,其页面中有很多gridview ...现在我正在使用这样的排序函数对fridveiw进行排序:

    protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {
        DataTable dt = Session["TaskTable2"] as DataTable;

        if (dt != null)
        {

            //Sort the data.
            dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
            GridView1.DataSource = Session["TaskTable2"];
            GridView1.DataBind();
        }

    }

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

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

        if (sortExpression2 != null)
        {
            // Check if the same column is being sorted.
            // Otherwise, the default value can be returned.
            if (sortExpression2 == column)
            {
                string lastDirection = ViewState["SortDirection2"] as string;
                if ((lastDirection != null) && (lastDirection == "ASC"))
                {
                    sortDirection2 = "DESC";
                }
            }
        }

        // Save new values in ViewState.
        ViewState["SortDirection2"] = sortDirection2;
        ViewState["SortExpression2"] = column;

        return sortDirection2;
    }

但是这个代码在很多页面中重复,所以我试着将这个函数放在C#类中并尝试调用它,但是我得到错误....

对于初学者我得到了viewstate错误说:|

“viewstate在当前上下文中不存在”

所以我该如何做呢....

谢谢

所以这就是我班上的内容:

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

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

        if (sortExpression2 != null)
        {
            // Check if the same column is being sorted.
            // Otherwise, the default value can be returned.
            if (sortExpression2 == column)
            {
                string lastDirection = ViewState["SortDirection2"] as string;
                if ((lastDirection != null) && (lastDirection == "ASC"))
                {
                    sortDirection2 = "DESC";
                }
            }
        }

        // Save new values in ViewState.
        ViewState["SortDirection2"] = sortDirection2;
        ViewState["SortExpression2"] = column;

        return sortDirection2;
    }

我正在从我的代码中调用它:

 protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {
        DataTable dt = Session["TaskTable2"] as DataTable;

        if (dt != null)
        {

            //Sort the data.
            dt.DefaultView.Sort = e.SortExpression + " " + new impersonateClass().GetSortDirection(e.SortExpression);
            GridView1.DataSource = Session["TaskTable2"];
            GridView1.DataBind();
        }

    }

我得到了视图状态错误...

这是一种将整个事情放在课堂上的方法......因为它在各处都重复了......

1 个答案:

答案 0 :(得分:2)

您需要传递ViewState,因为ViewState对象是Page类的成员。将代码移动到单独的类后,它就不再能够访问ViewState对象了。

public string GetSortDirection(string column, StateBag viewState) {
    // Your code here.
}