<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebPager.ascx.cs" Inherits="User_Crl_WebUserControl" %>
<script language="javascript">
function callButtonEvent()
{
var keycode =window.event.keyCode;
if(keycode==13)
{
if(check()==true)
{
event.cancelBubble=true;
event.returnValue=false;
document.getElementById('<%=btnGo.ClientID%>').click();
}
}
}
function check()
{
var count = parseInt(document.getElementById('<%=lblTotal.ClientID%>').outerText);
var txt = document.getElementById('<%=txtCurrentPage.ClientID%>').value;
var cur = parseInt(txt);
if ((cur | NaN) ==0)
{
alert('Input page must format as integer.');
event.cancelPostBack=true;
return false;
}
if (cur > count || cur < 1)
{
alert('Input page no out of range.');
event.cancelPostBack=true;
return false;
}
}
</script>
<TABLE ID="Table1" CELLSPACING="0" CELLPADDING="0" WIDTH="100%" BORDER="0">
<colgroup>
<col width="50">
<col width="50">
<col width="40">
<col width="20">
<col width="40">
<col width="40">
<col width="50">
<col width="70">
<col width="400">
</colgroup>
<TR align="left">
<TD><asp:LinkButton id="btnFirstPage" runat="server" CommandArgument="First">第一页</asp:LinkButton></TD>
<TD><asp:LinkButton id="btnPrevPage" runat="server" CommandArgument="Prev">上一页</asp:LinkButton></TD>
<TD><ASP:TEXTBOX ID="txtCurrentPage" RUNAT="server" MAXLENGTH="3" Width="40">0</ASP:TEXTBOX></TD>
<TD><ASP:LABEL ID="labOf" RUNAT="server">of</ASP:LABEL></TD>
<TD><ASP:LABEL ID="lblTotal" RUNAT="server">0</ASP:LABEL></TD>
<TD><ASP:BUTTON ID="btnGo" RUNAT="server" TEXT="转到" COMMANDARGUMENT="Go" ToolTip="转到"></ASP:BUTTON></TD>
<TD><asp:LinkButton id="btnNextPage" runat="server" CommandArgument="Next">下一页</asp:LinkButton></TD>
<TD><asp:LinkButton id="btnLastPage" runat="server" CommandArgument="Last">最后一页</asp:LinkButton></TD>
<td></td>
</TR>
</TABLE>
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class User_Crl_WebUserControl : System.Web.UI.UserControl
{
int size = 10;//可以在web.config中配置
public event System.EventHandler NavigationClick;
protected void Page_Load(object sender, EventArgs e)
{
this.txtCurrentPage.Attributes.Add("onkeypress", "callButtonEvent();");
this.btnGo.Attributes.Add("onclick", "check();");
if (!this.IsPostBack)
{
SetStyle();
SetEnable();
}
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
this.btnFirstPage.Click += new System.EventHandler(this.btnGo_Click);
this.btnPrevPage.Click += new System.EventHandler(this.btnGo_Click);
this.btnNextPage.Click += new System.EventHandler(this.btnGo_Click);
this.btnLastPage.Click += new System.EventHandler(this.btnGo_Click);
this.btnGo.Click += new System.EventHandler(this.btnGo_Click);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
}
#endregion
#region btnGo_Click
private void btnGo_Click(object sender, System.EventArgs e)
{
LinkButton linkbtn = sender as LinkButton;
if (null == linkbtn)//button
{
Button btn = sender as Button;
if (null == btn)
{
return;
}
else
{
int selPage = -1;
try
{
selPage = Int32.Parse(txtCurrentPage.Text);
}
catch
{
selPage = -1;
}
if (selPage > 0 && selPage <= PageCount)
{
ViewState["CurrentPageIndex"] = selPage;
}
else
{
return;
}
}
}
else//linkbutton
{
switch (linkbtn.CommandArgument.Trim())
{
case "First":
ViewState["CurrentPageIndex"] = 1;
break;
case "Prev":
ViewState["CurrentPageIndex"] = (CurrentPageIndex > 1) ? CurrentPageIndex - 1 : 1;
break;
case "Next":
ViewState["CurrentPageIndex"] = (PageCount > CurrentPageIndex) ? CurrentPageIndex + 1 : PageCount;
break;
case "Last":
ViewState["CurrentPageIndex"] = PageCount;
break;
default:
break;
}
}
SetEnable();//设置显示样式
if (NavigationClick != null)//调用事件
{
NavigationClick(sender, e);
}
}
#endregion
#region SetStyle
private void SetStyle()
{
this.btnFirstPage.Attributes["style"] = "CURSOR: hand";
this.btnLastPage.Attributes["style"] = "CURSOR: hand";
this.btnNextPage.Attributes["style"] = "CURSOR: hand";
this.btnPrevPage.Attributes["style"] = "CURSOR: hand";
}
#endregion
#region SetEnable
// 应根据当前的CurrentPageIndex和pageCount设定哪些按钮可用
private void SetEnable()
{
this.lblTotal.Text = PageCount.ToString();
txtCurrentPage.Text = CurrentPageIndex.ToString();
btnPrevPage.Enabled = false;
btnNextPage.Enabled = false;
if (PageCount > 1)
{
btnFirstPage.Enabled = btnPrevPage.Enabled = (CurrentPageIndex > 1);
btnNextPage.Enabled = btnLastPage.Enabled = (CurrentPageIndex < PageCount);
}
else
{
btnFirstPage.Enabled = false;
btnLastPage.Enabled = false;
btnPrevPage.Enabled = false;
btnNextPage.Enabled = false;
}
}
#endregion
#region Property
//获取或设置当前显示页的索引。
public int CurrentPageIndex
{
get
{
object cpage = ViewState["CurrentPageIndex"];
int pindex = (cpage == null) ? 1 : (int)cpage;
if (pindex > PageCount && PageCount > 0)
return PageCount;
else if (pindex < 1)
return 1;
return pindex;
}
set
{
int cpage = value;
if (cpage < 1)
cpage = 1;
else if (cpage > this.PageCount)
cpage = this.PageCount;
ViewState["CurrentPageIndex"] = cpage;
}
}
// 获取或设置需要分页的所有记录的总数。
public int RecordCount
{
get
{
object obj = ViewState["Recordcount"];
return (obj == null) ? 0 : (int)obj;
}
set
{
ViewState["Recordcount"] = value;
SetEnable();
}
}
//获取当前页之后的页的总数。
public int PagesRemain
{
get
{
return PageCount - CurrentPageIndex;
}
}
// 获取或设置每页显示的项数。
public int PageSize
{
get
{
object obj = ViewState["PageSize"];
if (obj == null)
{
obj = size;
}
return (obj == null) ? size : (int)obj;
}
set
{
int pageSize = value;
if (Math.Abs(pageSize) == 0)
pageSize = size;
ViewState["PageSize"] = pageSize;
}
}
// 获取在当前页之后还未显示的剩余记录的项数。
public int RecordsRemain
{
get
{
if (CurrentPageIndex < PageCount)
{
return RecordCount - (CurrentPageIndex * PageSize);
}
else
{
return 0;
}
}
}
// 获取所有要分页的记录需要的总页数。
public int PageCount
{
get { return (RecordCount > 0) ? (int)Math.Ceiling((double)RecordCount / (double)PageSize) : 1; }
}
//public int XRecord
//{
// get
// {
// return int.Parse(System.Configuration.ConfigurationSettings.AppSettings["XRecord"].Trim());
// }
//}
#endregion Property
}