сортировка сетки в классе - PullRequest
2 голосов
/ 12 марта 2010

хорошо, у меня есть проект, у которого есть много 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 не существует в текущем контексте"

так, как мне это сделать .... ??

спасибо

так вот что есть в моем классе:

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 Ответ

2 голосов
/ 12 марта 2010

Вам нужно будет передать ViewState, поскольку объект ViewState является членом класса Page. После того, как вы переместили код в отдельный класс, он больше не имел доступа к объекту ViewState.

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