最近在公司的项目开发中写的一个分页控件
后台代码:
Code
using System;
using System.Collections;
using System.Data;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace LMS.CommonLib.UI
{
[Serializable]
public class PageArgs : EventArgs
{
public PageArgs()
{
}
private int _currentPageIndex;
public int CurrentPageIndex
{
get
{
return _currentPageIndex;
}
set
{
_currentPageIndex = value;
}
}
}
public delegate void EventPageIndex(Object sender, PageArgs e);
[DefaultProperty("RecordCount")]
[ToolboxData("<{0}:Pager runat=server></{0}:Pager>")]
public class Pager : WebControl, IPostBackEventHandler
{
#region Event
public event EventPageIndex PageChange; //页更改事件
public virtual void OnPageChange(Object sender, PageArgs e)
{
if(PageChange!=null)
{
PageChange(this, e);
}
}
public void RaisePostBackEvent(string eventArgument)
{
this.CurrentPageIndex = Int32.Parse(System.Web.HttpContext.Current.Request.Form[this.UniqueID].ToString());
PageArgs e = new PageArgs();
e.CurrentPageIndex = this.CurrentPageIndex;
OnPageChange(this, e);
}
#endregion Event
#region private variables
private int _pageCount;
private int _recordCount;
private int _currentPageIndex = 1;
private int _pageSize = 15;
#endregion
#region Private properties
/// <summary>
/// Current page
/// </summary>
public int CurrentPageIndex
{
get
{
return (ViewState["CurrentPageIndex"] == null) ? 1 : (int)ViewState["CurrentPageIndex"];
}
set
{
_currentPageIndex = value;
ViewState["CurrentPageIndex"] = value;
}
}
/// <summary>
/// Total pages
/// </summary>
private int PageCount
{
get
{
if ((RecordCount % PageSize) == 0)
{
_pageCount = RecordCount / PageSize;
}
else
{
_pageCount = RecordCount / PageSize + 1;
}
return _pageCount;
}
}
#endregion Private properties
#region Public properties
/// <summary>
/// Total Records
/// </summary>
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public int RecordCount
{
get
{
return (ViewState["RecordCount"]==null)?0:(int)(ViewState["RecordCount"]);
}
set
{
_recordCount = value;
ViewState["RecordCount"] = value;
}
}
/// <summary>
/// Records of per page
/// </summary>
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public int PageSize
{
get
{
return (ViewState["PageSize"]==null)?1:(int)(ViewState["PageSize"]);
}
set
{
//EnsureChildControls();
_pageSize = value;
ViewState["PageSize"] = value;
}
}
#endregion Public properties
#region Methods
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
string dopost = "<div>\n";
dopost += " <input type=\"hidden\" name=\"" + this.UniqueID + "\" id=\"__EVENTTARGET\" value=\"\" />\n";
dopost += "</div>\n";
dopost += "<script type=text/javascript>\n";
dopost += " function _doPost(cutomArg){\n";
dopost += " document.forms['form1']."+this.UniqueID+".value = cutomArg;\n";
dopost += " document.forms['form1'].submit();\n";
dopost += " }\n";
dopost += "</script>\n";
if (!Page.ClientScript.IsClientScriptIncludeRegistered(this.GetType(), "_doPost"))
{
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "_doPost", dopost);
}
}
public int PageNumber = 10;
protected override void RenderContents(HtmlTextWriter writer)
{
writer.Write("<div class=\"" + this.CssClass + "\">\n");
writer.Write("记录数:");
writer.Write(RecordCount);
writer.Write(" 总页数:");
writer.Write(PageCount+" ");
if (PageCount <= PageNumber)
{
if (CurrentPageIndex <= 1)
{
writer.Write("<span class='disabled'> < </span>\n ");
}
else
{
writer.Write("<a href=\"javascript:_doPost('" + (CurrentPageIndex - 1) + "')\"> < </a>\n ");
}
for (int i = 1; i <= PageCount; i++)
{
if (i == CurrentPageIndex)
{
//writer.Write("<a href=\"javascript:_doPost('" + i + "')\">" + i + "</a>\n ");
writer.Write("<span class='current'>" + (i) + "</span>\n ");
}
else
{
writer.Write("<a href=\"javascript:_doPost('" + i + "')\">" + i + "</a>\n ");
}
}
if (CurrentPageIndex >= PageCount)
{
writer.Write("<span class='disabled'> > </span>\n ");
}
else
{
writer.Write("<a href=\"javascript:_doPost('" + (CurrentPageIndex + 1) + "')\"> > </a>\n");
}
}
else
{
int basePageCount = 0;
if ((CurrentPageIndex % PageNumber) == 0)
{
basePageCount = CurrentPageIndex / PageNumber - 1;
}
else
{
basePageCount = CurrentPageIndex / PageNumber;
}
int lastPageCount = PageCount / PageNumber;
if (CurrentPageIndex <= 1 )
{
writer.Write("<span class='disabled'> < </span>\n ");
}
else
{
writer.Write("<a href=\"javascript:_doPost('" + (CurrentPageIndex - 1) + "')\"> < </a>\n ");
}
if (lastPageCount == basePageCount)
{
writer.Write("<a href=\"javascript:_doPost('" + 1 + "')\">" + 1 + "</a>\n ");
writer.Write("<span>" + "" + "</span>\n ");
for (int i = 1; i <= PageNumber; i++)
{
int number = basePageCount * PageNumber + i;
if (number > PageCount)
{
break;
}
if (number == CurrentPageIndex)
{
writer.Write("<span class='current'>" + (number) + "</span>\n ");
}
else
{
writer.Write("<a href=\"javascript:_doPost('" + number + "')\">" + number + "</a>\n ");
}
}
}
else if (0 == basePageCount)
{
for (int i = 1; i <= PageNumber; i++)
{
int number = basePageCount * PageNumber + i;
if (number > PageCount)
{
break;
}
if (number == CurrentPageIndex)
{
writer.Write("<span class='current'>" + (number) + "</span>\n ");
}
else
{
writer.Write("<a href=\"javascript:_doPost('" + number + "')\">" + number + "</a>\n ");
}
}
writer.Write("<span>" + "" + "</span>\n ");
writer.Write("<a href=\"javascript:_doPost('" + PageCount + "')\">" + PageCount + "</a>\n ");
}
else
{
writer.Write("<a href=\"javascript:_doPost('" + 1 + "')\">" + 1 + "</a>\n ");
writer.Write("<span>" + "" + "</span>\n ");
for (int i = 1; i <= PageNumber; i++)
{
int number = basePageCount * PageNumber + i;
if (number > PageCount)
{
break;
}
if (number == CurrentPageIndex)
{
writer.Write("<span class='current'>" + (number) + "</span>\n ");
}
else
{
writer.Write("<a href=\"javascript:_doPost('" + number + "')\">" + number + "</a>\n ");
}
}
writer.Write("<span>" + "" + "</span>\n ");
writer.Write("<a href=\"javascript:_doPost('" + PageCount + "')\">" + PageCount + "</a>\n ");
}
if (CurrentPageIndex != PageCount)
{
writer.Write("<a href=\"javascript:_doPost('" + (CurrentPageIndex + 1) + "')\"> > </a>\n");
}
else
{
writer.Write("<span class='disabled'> > </span>\n ");
}
}
writer.Write("</div>\n");
}
#endregion Methods
}
}
using System;
using System.Collections;
using System.Data;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace LMS.CommonLib.UI
{
[Serializable]
public class PageArgs : EventArgs
{
public PageArgs()
{
}
private int _currentPageIndex;
public int CurrentPageIndex
{
get
{
return _currentPageIndex;
}
set
{
_currentPageIndex = value;
}
}
}
public delegate void EventPageIndex(Object sender, PageArgs e);
[DefaultProperty("RecordCount")]
[ToolboxData("<{0}:Pager runat=server></{0}:Pager>")]
public class Pager : WebControl, IPostBackEventHandler
{
#region Event
public event EventPageIndex PageChange; //页更改事件
public virtual void OnPageChange(Object sender, PageArgs e)
{
if(PageChange!=null)
{
PageChange(this, e);
}
}
public void RaisePostBackEvent(string eventArgument)
{
this.CurrentPageIndex = Int32.Parse(System.Web.HttpContext.Current.Request.Form[this.UniqueID].ToString());
PageArgs e = new PageArgs();
e.CurrentPageIndex = this.CurrentPageIndex;
OnPageChange(this, e);
}
#endregion Event
#region private variables
private int _pageCount;
private int _recordCount;
private int _currentPageIndex = 1;
private int _pageSize = 15;
#endregion
#region Private properties
/// <summary>
/// Current page
/// </summary>
public int CurrentPageIndex
{
get
{
return (ViewState["CurrentPageIndex"] == null) ? 1 : (int)ViewState["CurrentPageIndex"];
}
set
{
_currentPageIndex = value;
ViewState["CurrentPageIndex"] = value;
}
}
/// <summary>
/// Total pages
/// </summary>
private int PageCount
{
get
{
if ((RecordCount % PageSize) == 0)
{
_pageCount = RecordCount / PageSize;
}
else
{
_pageCount = RecordCount / PageSize + 1;
}
return _pageCount;
}
}
#endregion Private properties
#region Public properties
/// <summary>
/// Total Records
/// </summary>
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public int RecordCount
{
get
{
return (ViewState["RecordCount"]==null)?0:(int)(ViewState["RecordCount"]);
}
set
{
_recordCount = value;
ViewState["RecordCount"] = value;
}
}
/// <summary>
/// Records of per page
/// </summary>
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public int PageSize
{
get
{
return (ViewState["PageSize"]==null)?1:(int)(ViewState["PageSize"]);
}
set
{
//EnsureChildControls();
_pageSize = value;
ViewState["PageSize"] = value;
}
}
#endregion Public properties
#region Methods
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
string dopost = "<div>\n";
dopost += " <input type=\"hidden\" name=\"" + this.UniqueID + "\" id=\"__EVENTTARGET\" value=\"\" />\n";
dopost += "</div>\n";
dopost += "<script type=text/javascript>\n";
dopost += " function _doPost(cutomArg){\n";
dopost += " document.forms['form1']."+this.UniqueID+".value = cutomArg;\n";
dopost += " document.forms['form1'].submit();\n";
dopost += " }\n";
dopost += "</script>\n";
if (!Page.ClientScript.IsClientScriptIncludeRegistered(this.GetType(), "_doPost"))
{
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "_doPost", dopost);
}
}
public int PageNumber = 10;
protected override void RenderContents(HtmlTextWriter writer)
{
writer.Write("<div class=\"" + this.CssClass + "\">\n");
writer.Write("记录数:");
writer.Write(RecordCount);
writer.Write(" 总页数:");
writer.Write(PageCount+" ");
if (PageCount <= PageNumber)
{
if (CurrentPageIndex <= 1)
{
writer.Write("<span class='disabled'> < </span>\n ");
}
else
{
writer.Write("<a href=\"javascript:_doPost('" + (CurrentPageIndex - 1) + "')\"> < </a>\n ");
}
for (int i = 1; i <= PageCount; i++)
{
if (i == CurrentPageIndex)
{
//writer.Write("<a href=\"javascript:_doPost('" + i + "')\">" + i + "</a>\n ");
writer.Write("<span class='current'>" + (i) + "</span>\n ");
}
else
{
writer.Write("<a href=\"javascript:_doPost('" + i + "')\">" + i + "</a>\n ");
}
}
if (CurrentPageIndex >= PageCount)
{
writer.Write("<span class='disabled'> > </span>\n ");
}
else
{
writer.Write("<a href=\"javascript:_doPost('" + (CurrentPageIndex + 1) + "')\"> > </a>\n");
}
}
else
{
int basePageCount = 0;
if ((CurrentPageIndex % PageNumber) == 0)
{
basePageCount = CurrentPageIndex / PageNumber - 1;
}
else
{
basePageCount = CurrentPageIndex / PageNumber;
}
int lastPageCount = PageCount / PageNumber;
if (CurrentPageIndex <= 1 )
{
writer.Write("<span class='disabled'> < </span>\n ");
}
else
{
writer.Write("<a href=\"javascript:_doPost('" + (CurrentPageIndex - 1) + "')\"> < </a>\n ");
}
if (lastPageCount == basePageCount)
{
writer.Write("<a href=\"javascript:_doPost('" + 1 + "')\">" + 1 + "</a>\n ");
writer.Write("<span>" + "" + "</span>\n ");
for (int i = 1; i <= PageNumber; i++)
{
int number = basePageCount * PageNumber + i;
if (number > PageCount)
{
break;
}
if (number == CurrentPageIndex)
{
writer.Write("<span class='current'>" + (number) + "</span>\n ");
}
else
{
writer.Write("<a href=\"javascript:_doPost('" + number + "')\">" + number + "</a>\n ");
}
}
}
else if (0 == basePageCount)
{
for (int i = 1; i <= PageNumber; i++)
{
int number = basePageCount * PageNumber + i;
if (number > PageCount)
{
break;
}
if (number == CurrentPageIndex)
{
writer.Write("<span class='current'>" + (number) + "</span>\n ");
}
else
{
writer.Write("<a href=\"javascript:_doPost('" + number + "')\">" + number + "</a>\n ");
}
}
writer.Write("<span>" + "" + "</span>\n ");
writer.Write("<a href=\"javascript:_doPost('" + PageCount + "')\">" + PageCount + "</a>\n ");
}
else
{
writer.Write("<a href=\"javascript:_doPost('" + 1 + "')\">" + 1 + "</a>\n ");
writer.Write("<span>" + "" + "</span>\n ");
for (int i = 1; i <= PageNumber; i++)
{
int number = basePageCount * PageNumber + i;
if (number > PageCount)
{
break;
}
if (number == CurrentPageIndex)
{
writer.Write("<span class='current'>" + (number) + "</span>\n ");
}
else
{
writer.Write("<a href=\"javascript:_doPost('" + number + "')\">" + number + "</a>\n ");
}
}
writer.Write("<span>" + "" + "</span>\n ");
writer.Write("<a href=\"javascript:_doPost('" + PageCount + "')\">" + PageCount + "</a>\n ");
}
if (CurrentPageIndex != PageCount)
{
writer.Write("<a href=\"javascript:_doPost('" + (CurrentPageIndex + 1) + "')\"> > </a>\n");
}
else
{
writer.Write("<span class='disabled'> > </span>\n ");
}
}
writer.Write("</div>\n");
}
#endregion Methods
}
}
前台测试页面:
Html
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="PageTest.aspx.cs" Inherits="Test_PageTest" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
<style type="text/css">
DIV.digg
{
padding-right: 3px;
padding-left: 3px;
padding-bottom: 3px;
margin: 3px;
padding-top: 3px;
text-align: right;
}
DIV.digg A
{
border-right: #aaaadd 1px solid;
padding-right: 5px;
border-top: #aaaadd 1px solid;
padding-left: 5px;
padding-bottom: 2px;
margin: 2px;
border-left: #aaaadd 1px solid;
color: #000099;
padding-top: 2px;
border-bottom: #aaaadd 1px solid;
text-decoration: none;
}
DIV.digg A:hover
{
border-right: #000099 1px solid;
border-top: #000099 1px solid;
border-left: #000099 1px solid;
color: #000;
border-bottom: #000099 1px solid;
}
DIV.digg A:active
{
border-right: #000099 1px solid;
border-top: #000099 1px solid;
border-left: #000099 1px solid;
color: #000;
border-bottom: #000099 1px solid;
}
DIV.digg SPAN.current
{
border-right: #000099 1px solid;
padding-right: 5px;
border-top: #000099 1px solid;
padding-left: 5px;
font-weight: bold;
padding-bottom: 2px;
margin: 2px;
border-left: #000099 1px solid;
color: #fff;
padding-top: 2px;
border-bottom: #000099 1px solid;
background-color: #000099;
}
DIV.digg SPAN.disabled
{
border-right: #eee 1px solid;
padding-right: 5px;
border-top: #eee 1px solid;
padding-left: 5px;
padding-bottom: 2px;
margin: 2px;
border-left: #eee 1px solid;
color: #ddd;
padding-top: 2px;
border-bottom: #eee 1px solid;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="gvTest" runat="server">
<Columns>
</Columns>
</asp:GridView>
<Template:Pager id="pager1" runat="server" PageSize="10" CssClass="digg" OnPageChange="pager1_PageChange" />
<asp:TextBox id="txtQuery" runat="server"></asp:TextBox>
<asp:Button ID="btnSearch" runat="server" OnClick="btnSearch_Click" />
</div>
</form>
</body>
</html>
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="PageTest.aspx.cs" Inherits="Test_PageTest" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
<style type="text/css">
DIV.digg
{
padding-right: 3px;
padding-left: 3px;
padding-bottom: 3px;
margin: 3px;
padding-top: 3px;
text-align: right;
}
DIV.digg A
{
border-right: #aaaadd 1px solid;
padding-right: 5px;
border-top: #aaaadd 1px solid;
padding-left: 5px;
padding-bottom: 2px;
margin: 2px;
border-left: #aaaadd 1px solid;
color: #000099;
padding-top: 2px;
border-bottom: #aaaadd 1px solid;
text-decoration: none;
}
DIV.digg A:hover
{
border-right: #000099 1px solid;
border-top: #000099 1px solid;
border-left: #000099 1px solid;
color: #000;
border-bottom: #000099 1px solid;
}
DIV.digg A:active
{
border-right: #000099 1px solid;
border-top: #000099 1px solid;
border-left: #000099 1px solid;
color: #000;
border-bottom: #000099 1px solid;
}
DIV.digg SPAN.current
{
border-right: #000099 1px solid;
padding-right: 5px;
border-top: #000099 1px solid;
padding-left: 5px;
font-weight: bold;
padding-bottom: 2px;
margin: 2px;
border-left: #000099 1px solid;
color: #fff;
padding-top: 2px;
border-bottom: #000099 1px solid;
background-color: #000099;
}
DIV.digg SPAN.disabled
{
border-right: #eee 1px solid;
padding-right: 5px;
border-top: #eee 1px solid;
padding-left: 5px;
padding-bottom: 2px;
margin: 2px;
border-left: #eee 1px solid;
color: #ddd;
padding-top: 2px;
border-bottom: #eee 1px solid;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="gvTest" runat="server">
<Columns>
</Columns>
</asp:GridView>
<Template:Pager id="pager1" runat="server" PageSize="10" CssClass="digg" OnPageChange="pager1_PageChange" />
<asp:TextBox id="txtQuery" runat="server"></asp:TextBox>
<asp:Button ID="btnSearch" runat="server" OnClick="btnSearch_Click" />
</div>
</form>
</body>
</html>