【问题标题】:Issues with paging and sorting in asp.net gridviewasp.net gridview中的分页和排序问题
【发布时间】:2012-02-06 03:45:51
【问题描述】:

我有一个网格视图,我在其中实现了分页和排序。当我对表格进行排序并选择第 2 页时,排序丢失,后 20 条记录显示在 desc 中,如 gridview 绑定中所述

private DataSet BindGridView(string field)
        {
         DataSet ds = new DataSet()
      string userQuery = "Select tbl_User.UserID, tbl_User.FirstName from tbl_user order by tbl_user.UserID desc";
      UserTable.DataBind();
            return ds;
        }



<asp:GridView ID="UserTable" runat="server"   PageSize="20" AllowPaging="True"
                    SelectedIndex="0" DataKeyNames="UserID"  OnRowDataBound="UserTable_RowDataBound"                   
   AutoGenerateColumns="false" OnPageIndexChanging="gridView_PageIndexChanging"  AllowSorting="true" OnSorting="gridView_Sorting">

如何保留排序并执行分页,我将排序状态存储在会话中,我如何使用它来执行分页。

protected void gridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            UserTable.PageIndex = e.NewPageIndex;        
            UserTable.DataBind();
            DataView myView = new DataView(BindGridView(Session["useremail"].ToString()).Tables[0]);
        }

     protected void gridView_Sorting(object sender, GridViewSortEventArgs e)
        {
            string sortExpression = null;
            if ((Session["UsersortExpression"] == null))
            {
                sortExpression = null;
            }
            else
            {
                sortExpression = (Session["UsersortExpression"].ToString());
            }
            if (sortExpression == e.SortExpression)
            {
                sortExpression += " DESC";
            }
            else
            {
                sortExpression = e.SortExpression;
            }
            DataView myView = new DataView(BindGridView(Session["useremail"].ToString()).Tables[0]);
            myView.Sort = sortExpression;
            UserTable.DataSource = myView;
            UserTable.DataBind();
            //save sort state 
            Session.Add("UsersortExpression", sortExpression);
        }

【问题讨论】:

  • 似乎您正在重新绑定页面索引中的网格,并再次在 BindGridView 中重新绑定。不要多次重新绑定网格。只需确保您的 BindGridView 方法在检查您的页面索引和排序逻辑后执行绑定即可。
  • 如果我不从分页代码隐藏中调用 bindgridview,那么第 2 页没有被填充,它没有记录。我该怎么做,你能显示一些代码

标签: c# asp.net sorting gridview paging


【解决方案1】:

您可以使用 ViewState String vars 对源查询应用排序以存储排序 field 和排序 direction

确保 ViewState 变量设置为默认值:

ViewState["sortDir"] = "DESC"; 
ViewState["sortField"] = "tbl_user.UserID";

然后,修改您的查询字符串:

string userQuery = 
"Select tbl_User.UserID, tbl_User.FirstName " +
"from tbl_user " + 
"ORDER BY " + (String)ViewState["sortField"] + " " + (String)ViewState["sortDir"];

包含在 OnSorting 中:

protected void gridView_Sorting(object sender, GridViewSortEventArgs e)
{
    // Set new sort direction and sort field
    if ((String)ViewState["sortDir"] == "DESC"){ViewState["sortDir"] = "ASC";}
    else { ViewState["sortDir"] = "DESC"; }
    ViewState["sortField"] = e.SortExpression;

    // Rebind
    ...     
}

这样,您的源数据已预先排序,您无需担心使用myView.Sort 或遇到任何分页/排序冲突。

【讨论】:

    【解决方案2】:

    关于asp.net gridview中的分页和排序请参考这个article

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 2010-10-09
      • 2010-10-13
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      相关资源
      最近更新 更多