//Repeater分页控件///[ToolboxData("")]publicclassFMPager : WebControl, INamingContainer
{protectedstaticreadonlystringnavigateClassFmt="
{
pagedDataSource=newPagedDataSource();
}publicoverridevoidDataBind()
{base.DataBind();if(string.IsNullOrEmpty(repeaterId))
{return;
}
Control repeater=FindRepeater(Page);if(repeater==null||!(repeaterisRepeater))
{return;
}
ChildControlsCreated=false;
Repeater finalRepeater=repeaterasRepeater;
pagedDataSource.CurrentPageIndex=currentPageIndex;
pagedDataSource.PageSize=pageSize;
pagedDataSource.VirtualCount=recordCount;
pagedDataSource.DataSource=DataSource;
finalRepeater.DataSource=pagedDataSource;
finalRepeater.DataBind();
}//把数据内容传递到客户端///protectedoverridevoidRender(HtmlTextWriter output)
{if(Site!=null&&Site.DesignMode)
{
CreateChildControls();
}
output.Write(OutputNavigate());base.Render(output);
}//输出导航///protectedvirtualstringOutputNavigate()
{//总页码数intpageCount=recordCount/pageSize;if(recordCount%pageSize!=0)
{
pageCount+=1;
}if(currentPageIndex>pageCount)
{
currentPageIndex=pageCount;
}
StringBuilder sbNavigate=newStringBuilder();//输出跳转到sbNavigate.AppendFormat(navigateGotoFmt, pagerJs, currentPageIndex);//获取第一页、上一页sbNavigate.Append("
- ");if(currentPageIndex>1&&pageCount>1)
{
sbNavigate.AppendFormat(navigateAjaxlinkFmt, pagerJs,1,"第一页","");
sbNavigate.AppendFormat(navigateAjaxlinkFmt, pagerJs, currentPageIndex-1,"上一页","");
}else{
sbNavigate.Append(string.Format(navigateDisableLinkFmt,"第一页"));
sbNavigate.Append(string.Format(navigateDisableLinkFmt,"上一页"));
}//获取数字页intnavigateCount=10;//每10页进行导航intnavigateTotal=pageCount/navigateCount;//总计能生成多少个数字导航intpageInNavigate=((currentPageIndex-1)/navigateCount)+1;//当前在第几个数字导航中//计算数字导航开始页序及结束页序intstartIndex=(pageInNavigate-1)*navigateCount+1;//数字导航开始页序intendIndex=startIndex+navigateCount-1;//数字导航结束页序if(endIndex>pageCount)
{
endIndex=pageCount;
}stringcurrentPageClass="";for(inti=startIndex; i<=endIndex; i++)
{
currentPageClass="";if(i==currentPageIndex)
{
currentPageClass="pageactive";
}
sbNavigate.AppendFormat(navigateAjaxlinkFmt, pagerJs, i, i, currentPageClass);
}//获取下一页、最后页if(currentPageIndex!=pageCount&&pageCount>1)
{
sbNavigate.AppendFormat(navigateAjaxlinkFmt, pagerJs, currentPageIndex+1,"下一页","");
sbNavigate.AppendFormat(navigateAjaxlinkFmt, pagerJs, pageCount,"最后页","");
}else{
sbNavigate.AppendFormat(navigateDisableLinkFmt,"下一页");
sbNavigate.AppendFormat(navigateDisableLinkFmt,"最后页");
}
sbNavigate.Append("
");//输出总页数、当前页sbNavigate.AppendFormat(navigatePageTotalFmt, recordCount, currentPageIndex, pageCount);returnstring.Format(navigateClassFmt, sbNavigate.ToString());}//查找输出Repeater///privateControl FindRepeater(Control ctrl)
{
Control retCtrl=ctrl.FindControl(repeaterId);if(retCtrl!=null)
{returnretCtrl;
}foreach(Control childCtrlinPage.Controls)
{
retCtrl=childCtrl.FindControl(repeaterId);if(retCtrl!=null)
{returnretCtrl;
}
FindRepeater(retCtrl);
}returnnull;
}//绑定数据源///publicIEnumerable DataSource
{get;set;
}
[Description("当前页")]publicintCurrentPageIndex
{get{
currentPageIndex=HTMLHelper.QueryStringInt("p");if(currentPageIndex<=0)
{
currentPageIndex=1;
}returncurrentPageIndex;
}set{
currentPageIndex=value;
}
}privateintcurrentPageIndex=0;
[Description("分页控件ID")]publicstringRepeaterId
{get{returnrepeaterId;
}set{
repeaterId=value;
}
}privatestringrepeaterId="";
[Description("每页显示记录数")]publicintPageSize
{get{returnpageSize;
}set{
pageSize=value;
}
}privateintpageSize=20;
[Description("总记录数")]publicintRecordCount
{get{returnrecordCount;
}set{
recordCount=value;
}
}privateintrecordCount=0;
[Description("JS分页函数")]publicstringPagerJs
{get{returnpagerJs;
}set{
pagerJs=value;
}
}privatestringpagerJs="pagerObj.Page";
}