为了使GridView、DataList、Repeater等控件显示的数据适应不同的显示器分辨率,往往需要根据显示器分辨率的大小选择每页显示多少条数据。
偶也遇到了这个
问题,总结解决方法如下:
1.通过url方式更改PageSize
AspNetPagerVersion7.1以上版本可以使用UrlPageSizeName参数来更改。
PageSize属性源码(Properties.cs文件中):
publicintPageSize
{
get
{
//检测使用UrlPageSizeName参数
if(!string.IsNullOrEmpty(UrlPageSizeName)&;&;!DesignMode)
{
intpageSize;
if(int.TryParse(Page.Request.QueryString[UrlPageSizeName],outpageSize))
{
if(pageSize>0)
returnpageSize;
}
}
//End
if(null!=cloneFrom)
returncloneFrom.PageSize;
objectobj=ViewState["PageSize"];
return(obj==null)?10:(int)obj;
}
set
{
ViewState["PageSize"]=value;
}
}
2.通过自定义下拉框更改PageSize
a)在Properties.cs文件中增加ShowPageSizeBox属性
///
NETPAGERDOCS.XML'PATH='ASPNETPAGERDOC *? ] Property[@name="ShowPageSizeBox" />
[Browsable(true),ANPCategory("cat_PageSizeBox"),DefaultValue(null),ANPDescription("desc_ShowPageSizeBox")]
publicboolShowPageSizeBox
{
get
{
if(null!=cloneFrom)
returncloneFrom.ShowPageSizeBox;
objectobj=ViewState["ShowPageSizeBox"];
//此处为当未设置ShowPageSizeBox属性时,取web.config中AppSettings的ShowPageSizeBox
if(obj==null)
{
obj=System.Configuration.ConfigurationManager.AppSettings["ShowPageSizeBox"];
}
return(obj==null)?false:bool.Parse(obj.ToString());
}
set{ViewState["ShowPageSizeBox"]=value;}
}
b)在Helper.cs文件中更改RenderPagingElements方法
在原方法的后面增加
...
//上面的代码省略,此处为要新增的代码
if(ShowPageSizeBox&;&;this.PageSize {
stringsizeClientId=UniqueID+"_ChangePageSize";
writer.Write("&;nbsp;&;nbsp;每页显示条数:");
writer.AddAttribute(HtmlTextWriterAttribute.Name,sizeClientId);
writer.AddAttribute(HtmlTextWriterAttribute.Id,sizeClientId);
writer.AddAttribute(HtmlTextWriterAttribute.Onchange,Page.ClientScript.GetPostBackEventReference(this,null));
writer.RenderBeginTag(HtmlTextWriterTag.Select);
listPageSize(writer);
writer.RenderEndTag();
}
//结束
}//endRenderPagingElements
同时在Helper.cs文件中增加下拉框的内容选项方法
voidlistPageSize(HtmlTextWriterwriter)
{
for(inti=10;i<=50;i+=5)
{
writer.Write(" writer.Write(i);
writer.Write("\"");
if(i==PageSize)
writer.Write("selected=\"true\"");
writer.Write(">");
writer.Write(i);
writer.Write("");
}
}
c)修改aspnetpager.cs文件中的OnLoad事件
protectedoverridevoidOnLoad(EventArgse)
{
if(UrlPaging)
{
currentUrl=Page.Request.Path;
queryString=Page.Request.ServerVariables["Query_String"];
if(!Page.IsPostBack&;&;cloneFrom==null)
{
intindex;
int.TryParse(Page.Request.QueryString[UrlPageIndexName],outindex);
if(index<=0)
index=1;
elseif(ReverseUrlPageIndex)
index=PageCount-index+1;
PageChangingEventArgsargs=newPageChangingEventArgs(index);
OnPageChanging(args);
}
}
else
{
inputPageIndex=Page.Request.Form[UniqueID+"_input"];
//此处为新增代码
if(null!=Page.Request.Form[UniqueID+"_ChangePageSize"])
{
this.PageSize=int.Parse(Page.Request.Form[UniqueID+"_ChangePageSize"]);
}
//新增代码结束
}
base.OnLoad(e);
}
d)给ShowPageSizeBox属性添加说明,在AspNetPagerDocs.xml文件中添加如下节点。
获取或设置每页显示记录数。<