用于对GridView进行排序的会话问题

时间:2014-04-14 13:44:15

标签: c# asp.net gridview

我的GridView的Session["TaskTable"]数据源有问题。 当我第一次打开.aspx网站Session["TaskTable"]为空时,如果我重新加载页面(F5),则Session["TaskTable"]是我的数据表taskTable。怎么会这样?如果我第一次重新加载页面,我只能排序。有任何想法吗?感谢

protected void Page_Load(object sender, EventArgs e)
    {

        if (!Page.IsPostBack)
        {
            DataTable taskTable = new DataTable("TaskList");
            taskTable = dtCloned;                
            Session["TaskTable"] = taskTable;
            GV_Projekte.DataSource = Session["TaskTable"];
            GV_Projekte.DataBind();

         }
     }

用于排序我的GridView

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

        if (dt != null)
        {
            //Sort the data.
            dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
            GV_Projekte.DataSource = Session["TaskTable"];
            GV_Projekte.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;
    }

2 个答案:

答案 0 :(得分:0)

那是因为Page.IsPostback条件当页面没有回发时,它将会话分配给变量,现在这个值将会存在,直到任何会话超时都会到期。

采取以下练习。

 protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["a"]==null)
        {
            Response.Write("Session is empty");
        }
        else
        {
            Response.Write("Session is not empty");
            Response.Write(Session["a"].ToString());
        }
        if (!Page.IsPostBack)
        {
            Session["a"] = "Jalpesh";
        }
    }

在空白页面中,我正在做同样的事情,但是第一次页面会加载,那时它会打印“会话空”'但是,在会话到期之前,该会话将不会为空,因此会打印“会话不为空”#。

因此,如果您需要会话值null,则必须在某处将会话分配给null。

答案 1 :(得分:0)

我找到了解决方案,函数gv_Sorting必须在page_load之前站立,以便第一次正确填充。另请参阅我从中获取代码的示例: http://msdn.microsoft.com/de-de/library/system.web.ui.webcontrols.gridview.sorting(v=vs.110).aspx