没有数据源控件共享的高效Gridview分页问题我正在尝试使用gridview进行高效分页而不使用数据源控件。通过有效,我的意思是我只检索我打算显示的记录。我正在尝试使用PagerTemplate来构建我的寻呼机功能。简而言之,问题是如果我只绑定我打算在当前页面上显示的记录,则gridview不会呈现其分页模板,因此我无法获得分页控件。这几乎就像我必须绑定比我打算在给定页面上显示的记录更多的记录,这不是我想要做的。您需要创建一个继承自GridView的自定义gridview控件。如果没有DataSourceControl,gridview就不知道可能绑定到该控件的记录总数。如果绑定100条记录中的10条记录并将PageSize属性设置为10,则gridview只知道有10条记录小于或等于PageSize,分页控件将不会显示。为了让gridview显示分页器,它必须知道可以检索的记录总数。通过继承gridview,重写InitializePager方法,我们可以拦截pagedDataSource,修改AllowCustomPaging和VirtualCount方法。这是我创造的那个使用系统;使用System.Collections.Generic;使用系统文本;使用System.Web.UI.WebControls;使用System.ComponentModel;命名空间cly.Web.CustomControls{publicclassclyGridView:GridView{privateconststring_virtualCountItem="bg_vitemCount";privateconststring_sortColumn="bg_sortColumn";privateconststring_sortDirection="bg_sortDirection";privateconststring_currentPageIndex="bg_pageIndex";publicclyGridView():base(){}#regionCustomProperties[Browsable(true),Category("NewDynamic")][Description("为此网格设置虚拟项目数")]publicintVirtualItemCount{get{if(ViewState[_virtualCountItem]==null)ViewState[_virtualCountItem]=-1;返回Convert.ToInt32(ViewState[_virtualCountItem]);}设置{ViewState[_virtualCountItem]=值;}}publicstringGridViewSortColumn{get{if(ViewState[_sortColumn]==null)ViewState[_sortColumn]=string.Empty;返回ViewState[_sortColumn].ToString();}set{if(ViewState[_sortColumn]==null||!ViewState[_sortColumn].Equals(value))GridViewSortDirection=SortDirection.Ascending;ViewState[_sortColumn]=值;}}publicSortDirectionGridViewSortDirection{get{if(ViewState[_sortDirection]==null)ViewState[_sortDirection]=SortDirection.Ascending;返回(SortDirection)ViewState[_sortDirection];}设置{ViewState[_sortDirection]=值;}}privateintCurrentPageIndex{get{if(ViewState[_currentPageIndex]==null)ViewState[_currentPageIndex]=0;返回Convert.ToInt32(ViewState[_currentPageIndex]);}设置{ViewState[_currentPageIndex]=值;}}privateboolCustomPaging{get{return(VirtualItemCount!=-1);}}#endregion#region覆盖父方法publicoverrideobjectDataSource{get{returnbase.DataSource;}set{base.DataSource=value;//存储页面索引,这样我们就不会在数据绑定事件中丢失它CurrentPageIndex=PageIndex;}}protectedoverridevoidOnSorting(GridViewSortEventArgse){//存储方向以确定下一个排序是升序还是降序SortDirectiondirection=SortDirection.Ascending;if(ViewState[_sortColumn]!=null&&(SortDirection)ViewState[_sortDirection]==SortDirection.Ascending){direction=SortDirection.Descending;}GridViewSortDirection=方向;GridViewSortColumn=e.SortExpression;base.OnSorting(e);}protectedoverridevoidInitializePager(GridViewRowrow,intcolumnSpan,PagedDataSourcepagedDataSource){//调用此方法来初始化网格上的分页器。我们拦截了它并覆盖//pagedDataSource的值以使用提供的默认分页器实现自定义分页pagedDataSource.CurrentPageIndex=CurrentPageIndex;}base.InitializePager(row,columnSpan,pagedDataSource);}protectedoverrideobjectSaveViewState(){//object[]状态=新对象[3];//state[0]=base.SaveViewState();//state[1]=this.dirtyRows;//state[2]=this.newRows;//返回状态;返回base.SaveViewState();}protectedoverridevoidLoadViewState(objectsavedState){//object[]state=null;//if(savedState!=null)//{//state=(object[])savedState;//base.LoadViewState(state[0]);//this.dirtyRows=(List)state[1];//this.newRows=(List)state[2];//}base.LoadViewState(savedState);}#endregionpublicoverridestring[]DataKeyNames{get{returnbase.DataKeyNames;}set{base.DataKeyNames=value;}}publicoverrideDataKeyArrayDataKeys{get{returnbase.DataKeys;}}publicoverrideDataKeySelectedDataKey{get{returnbase.SelectedDataKey;}}}}然后,当你绑定数据时:以上就是C#学习教程:无数据源控制的高效Gridview分页的全部内容。如果对大家有用,需要进一步了解C#希望大家多多关注教程——gv.DataSource=yourListOrWhatevergv.VirtualItemCount=numOfTotalRecords;gv.DataBind();本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
