using System.ComponentModel;
using System.Web.UI;
[assembly: TagPrefix("Jinlong.Control", "Jinlong")]
namespace Jinlong.Control
{
/// <summary>
/// JRepeater控件
/// Create by Jinlong Zhang
/// </summary>
[DefaultProperty("Text"), ToolboxData("<!--Repeater Begin --><div class="BigDiv_rep"> <{0}:Repeater ID="Rep_List" runat=server EnableViewState="false" OnPreRender="Rep_List_PreRender"> <HeaderTemplate><div class="BigDiv_Title_rep"> <ul> <li style="line-height:22px;"> <asp:CheckBox ID="TopCheckBox" runat="server" Text="ID" EnableViewState="false"/> </li><li style="10%;"> </li> </ul> </div> </HeaderTemplate><ItemTemplate><div class="BigDiv_line_rep" onmouseover="javascript:this.style.backgroundColor='#EEF8F9'" onmouseout="javascript:this.style.backgroundColor='#FFFFFF'"><ul ><li style="line-height:22px;"><asp:CheckBox ID="ItemCheckBox" runat="server" Text='<%# Eval("ID") %>' EnableViewState="false"/></li><li style="10%;"></li></ul></div></ItemTemplate> <FooterTemplate><div class="DelAllButton"><asp:Button ID="btn_DelAll" runat="server" onclick="btn_DelAll_Click" CssClass="btn_DelAllCss" Text="删除" EnableViewState="false"/></div></FooterTemplate></{0}:Repeater></div><!--Repeater End -->")]
public class Repeater : System.Web.UI.WebControls.Repeater
{
private int _recordcount = 0;
private int _pagesize = 0;
private string _pagelink = "";
private int _currentpage = 1;
/// <summary>
/// 构造函数
/// </summary>
public Repeater()
{
}
#region __________属性__________
[Bindable(true), Category("Data"), DefaultValue("1"), Description("记录总数")]
public int RecordCount
{
get
{
return _recordcount;
}
set
{
_recordcount = value;
}
}
[Bindable(true), Category("Data"), DefaultValue("1"), Description("每页显示记录数")]
public int PageSize
{
get
{
return _pagesize;
}
set
{
_pagesize = value;
}
}
[Bindable(true), Category("Data"), DefaultValue(""), Description("当前页链接")]
public string PageLink
{
get
{
return _pagelink;
}
set
{
_pagelink = value;
}
}
[Bindable(true), Category("Data"), DefaultValue("1"), Description("当前页")]
public int CurrentPage
{
get
{
return _currentpage;
}
set
{
_currentpage = value;
}
}
#endregion
/// <summary>
/// 输出html,在浏览器中显示控件
/// </summary>
/// <param name="output"> 要写出到的 HTML 编写器 </param>
protected override void Render(HtmlTextWriter output)
{
base.Render(output);
output.WriteLine("<div class="PageLink">" + Pagination(_recordcount, _pagesize, _currentpage, _pagelink) + "</div>");
}
/// <summary>
/// 分页函数
/// </summary>
/// <param name="recordcount">总记录数</param>
/// <param name="pagesize">每页记录数</param>
/// <param name="currentpage">当前页数</param>
/// <param name="url">Url参数</param>
/// <returns></returns>
public string Pagination(int recordcount, int pagesize, int currentpage, string url)
{
int allcurrentpage = 0;
int next = 0;
int pre = 0;
int startcount = 0;
int endcount = 0;
string currentpagestr = "";
if (currentpage < 1) { currentpage = 1; }
//计算总页数
if (pagesize != 0)
{
allcurrentpage = (recordcount / pagesize);
allcurrentpage = ((recordcount % pagesize) != 0 ? allcurrentpage + 1 : allcurrentpage);
allcurrentpage = (allcurrentpage == 0 ? 1 : allcurrentpage);
}
next = currentpage + 1;
pre = currentpage - 1;
startcount = (currentpage + 5) > allcurrentpage ? allcurrentpage - 9 : currentpage - 4;//中间页起始序号
//中间页终止序号
endcount = currentpage < 5 ? 10 : currentpage + 5;
if (startcount < 1) { startcount = 1; } //为了避免输出的时候产生负数,设置如果小于1就从序号1开始
if (allcurrentpage < endcount) { endcount = allcurrentpage; }//页码+5的可能性就会产生最终输出序号大于总页码,那么就要将其控制在页码数之内
currentpagestr = "共" + allcurrentpage + "页 ";
currentpagestr += currentpage > 1 ? "<a href="" + url + "?page=1">首页</a> <a href="" + url + "?page=" + pre + "">上一页</a>" : "首页 上一页";
//中间页处理,这个增加时间复杂度,减小空间复杂度
for (int i = startcount; i <= endcount; i++)
{
currentpagestr += currentpage == i ? " <font color="#ff0000">" + i + "</font>" : " <a href="" + url + "?page=" + i + "">" + i + "</a>";
}
currentpagestr += currentpage != allcurrentpage ? " <a href="" + url + "?page=" + next + "">下一页</a> <a href="" + url + "?page=" + allcurrentpage + "">末页</a>" : " 下一页 末页";
return currentpagestr;
}
}
}