GridView排序和分页我想在我的页面上显示一个简单的gridview,并为其提供排序和分页功能。排序和分页单独工作很好,但两者结合起来就不行了。例如,如果我对第一列进行降序排序,然后转到第二页,那么我会看到第二页数据的默认排序(升序)。我严重依赖这个问题的代码:GridViewsorting:SortDirectionalwaysascending,但问题仍然存在。另外-因为看起来我必须更改我的代码以便我使用会话对象而不是ViewState,所以我还必须解决这个问题......我的代码被简化为只有两列:ASPX:和代码隐藏:publicpartialclassTestPage:Page{protectedvoidPage_Load(objectsender,EventArgse){if(!IsPostBack){DisplayData();}}privatevoidDisplayData(){Session["TableView"]=GetUsers();dgvView.DataSource=Session["TableView"];dgvView.DataBind();}protectedvoidDgvViewPageIndexChanging(objectsender,GridViewPageEventArgse){dgvView.PageIndex=e.NewPageIndex;显示数据();}privateListGetUsers(){varusers=newList();for(inti=0;i<100;i++){users.Add(newMyUser("Name"+i.ToString().PadLeft(2,'0'),newDateTime(2000,1,1)。添加天数(i)));}返回用户;}privateclassMyUser{publicstringName{get;私有集;}publicDateTimeBirthDate{get;私有集;}publicMyUser(stringname,DateTimebirthDate){Name=name;出生日期=出生日期;}}受保护无效OnSort(objectsender,GridViewSortEventArgse){Funcf;if(e.SortExpression=="Name")f=u=>u.Name;elsef=u=>u.BirthDate;dgvView.DataSource=Sort((List)Session["TableView"],f,GetSortDirection(e.SortExpression));dgvView.DataBind();}privateListSort(IEnumerableuser,Funcf,SortDirectionsortDirection){if(sortDirection==SortDirection.Ascending)returnuser.OrderBy(f).ToList();返回user.OrderByDescending(f).ToList();}privateSortDirectionGetSortDirection(stringcolumn){stringsessionVariable="TableSort"+column;SortDirection排序方向;if(Session[sessionVariable]==null){sortDirection=SortDirection.Ascending;}elseif((SortDirection)Session[sessionVariable]==SortDirection.Ascending){sortDirection=SortDirection.Descending;}else{sortDirection=SortDirection.Ascending;}Session[sessionVariable]=sortDirection;返回排序方向;您必须使用ViewState才能保留数据publicstringSortVariable{get{if(ViewState["YourKey"]==null)returnstring.Empty;返回(字符串)ViewState[“YourKey”];}设置{ViewState["YourKey"]=值;更改页面时使用此解决方案,您可以在排序之前在视图状态中进行索引排序当您触发SortCommand时,您必须设置描述的视图状态的值您不需要Session,因为您在同一页面上,并且您不会导航protectedvoidOnSort(objectsender,GridViewSortEventArgse){//在这里设置你的值SortVariableSortVariable=e.SortExpression;...}并在显示数据之前创建数据视图和排序句柄privatevoidDisplayData(){//GetSortVariable//在与数据视图绑定之前进行排序}PageIndex=e.NewPageIndex;显示数据();调用DisplayData()方法时,您将网格绑定到未排序的全新数据。在Viewstate中保存排序参数(会话对此无用)如果您使用的是Asp.Net4,为什么不使用数据表或jQGrid?我在其他两个答案的帮助下解决了这个问题。我上面的解决方案是C#学习教程:GridView排序和分页分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——publicpartialclassTestPage1:Page{protectedvoidPage_Load(objectsender,EventArgse){if(!IsPostBack){ViewState["Data"]=MyUser.GetUsers();ViewState["SortExpression"]="名称";DisplayData("名称",SortDirection.Ascending);}}privatevoidDisplayData(stringsortExpression,SortDirectionsortDirection){Funcf;if(sortExpression=="Name")f=u=>u.Name;elsef=u=>u.BirthDate;if(sortDirection==SortDirection.Ascending){dgvView.DataSource=((IEnumerable)ViewState["Data"]).OrderBy(f).ToList();}else{dgvView.DataSource=((IEnumerable)ViewState["Data"]).OrderByDescending(f).ToList();}dgvView.DataBind();}protectedvoidDgvViewPageIndexChanging(objectsender,GridViewPageEventArgse){dgvView.PageIndex=e.NewPageIndex;字符串sortExpression=ViewState["SortExpression"].ToString();显示数据(排序表达式,GetDefaultSortDirection(排序表达式));}protectedvoidOnSort(objectsender,GridViewSortEventArgse){ViewState["SortExpression"]=e.SortExpression;ViewState[e.SortExpression]=GetReverseSortDirection(e.SortExpression);DisplayData(e.SortExpression,(SortDirection)ViewState[e.SortExpression]);}privateSortDirectionGetDefaultSortDirection(stringsortExpression){if(ViewState[sortExpression]==null){ViewState[sortExpression]=SortDirection.Ascending;}返回(SortDirection)ViewState[sortExpression];}privateSortDirectionGetReverseSortDirection(stringsortExpression){if(ViewState[sortExpression]==null){ViewState[sortExpression]=SortDirection.Descending;}else{ViewState[sortExpression]=(SortDirection)ViewState[sortExpression]==SortDirection.Descending?SortDirection.Ascending:SortDirection.Descending;}返回(SortDirection)ViewState[sortExpression];}}本文来自网络收集,不代表立场,如浸及权力请点点击右侧联系管理员删除。如需转载请注明出处:
