gpt4 book ai didi

c# - asp.net gridview 中的分页和排序问题

转载 作者:行者123 更新时间:2023-11-30 17:14:24 24 4
gpt4 key购买 nike

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

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">

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

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);
}

最佳答案

您可以使用 ViewState 字符串变量对源查询应用排序来存储排序字段和排序方向:

确保 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 或遇到任何分页/排序冲突。

关于c# - asp.net gridview 中的分页和排序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8791283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com