<%@ Control Language="C#" AutoEventWireup="true" Codebehind="ucCachePager.ascx.cs"
Inherits="H3cChinesePortal.UserControl.ucCachePager" %>
<table width="100%" align="center" class="ucpage">
<tr id="FootBar" align="center" runat="server" name="FootBar">
<td align="left">
</td>
<td align="right">
<asp:ImageButton ID="btnFirst" runat="server" CssClass="inpingbut11" ImageUrl="../image/first_on.gif">
</asp:ImageButton>
<asp:ImageButton ID="btnPrev" runat="server" CssClass="inpimgbut6" ImageUrl="../image/previous_on.gif">
</asp:ImageButton>
<font face="宋体">第<asp:Label ID="lbPageLabel" runat="server" Font-Size="9pt" ForeColor="navy"></asp:Label>页
</font>
<asp:ImageButton ID="btnNext" runat="server" CssClass="inpimgbut6" ImageUrl="../image/next_on.gif">
</asp:ImageButton>
<asp:ImageButton ID="btnLast" runat="server" CssClass="inpingbut11" ImageUrl="../image/last_on.gif">
</asp:ImageButton>
<font color="navy" size="2">
<asp:TextBox ID="txtPageIndex" runat="server" Width="26px" Height="16" οnkeypress="return event.keyCode>=48&&event.keyCode<=57||(this.value.indexOf('.')<0?event.keyCode==46:false)"
οnpaste="return !clipboardData.getData('text').match(//D/)" Style="border: #ccc 1px solid;
height: 18px; font-size: 11px;"></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="必须为数字"
Display="Dynamic" ControlToValidate="txtPageIndex" ValidationExpression="/d*$"
EnableClientScript="False"></asp:RegularExpressionValidator>
<asp:Button ID="btnGo" runat="server" Text="跳 转" CssClass="inpsubmit"></asp:Button>
</font>
</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;
namespace H3cChinesePortal.UserControl
{
public partial class ucCachePager : System.Web.UI.UserControl
{
/// <summary>
/// 当前页索引SessionName
/// </summary>
private string SESSIONNAME_CURRENTPAGEINDEX = "dgShow_CurrentPageIndex";
/// <summary>
/// 总页数SessionName
/// </summary>
private string SESSIONNAME_PAGES = "dgShow_Pages";
private DataRow[] drsSource = null;
private string filter = string.Empty;
public string Filter
{
set
{
this.filter = value;
}
}
#region [要绑定的控件]
private object bindControl = null;
/// <summary>
/// 要绑定的DataGrid控件
/// </summary>
public object BindControl
{
set
{
this.bindControl = value;
}
}
#endregion
#region[页大小]
private int pageSize = 20;
/// <summary>
/// 页大小
/// </summary>
public int PageSize
{
set
{
this.pageSize = value;
}
get
{
return this.pageSize;
}
}
#endregion
/// <summary>
/// 总页数
/// </summary>
private int pages = 1;
public int Pages
{
get
{
if (Session[SESSIONNAME_PAGES] != null)
{
this.pages = int.Parse(Session[SESSIONNAME_PAGES].ToString());
}
return this.pages;
}
}
#region[当前页]
private int currentPageIndex = 1;
/// <summary>
/// 当前页
/// </summary>
public int CurrentPageIndex
{
get
{
if (Session[SESSIONNAME_CURRENTPAGEINDEX] != null)
{
currentPageIndex = (int)Session[SESSIONNAME_CURRENTPAGEINDEX];
}
return this.currentPageIndex;
}
}
#endregion
#region[数据源]
private DataTable dtSource = null;
/// <summary>
/// 数据源
/// </summary>
public DataTable Source
{
set
{
this.dtSource = value;
}
}
#endregion
#region[排序字段]
/// <summary>
/// 排序字段,如:order by ID desc
/// </summary>
private string orderByString = string.Empty;
public string OrderByString
{
set
{
orderByString = value;
}
}
#endregion
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if (!IsPostBack)
{
SESSIONNAME_CURRENTPAGEINDEX = this.ID + SESSIONNAME_CURRENTPAGEINDEX;
SESSIONNAME_PAGES = this.ID + SESSIONNAME_PAGES;
Session[SESSIONNAME_CURRENTPAGEINDEX] = 1;
Session[SESSIONNAME_PAGES] = 1;
}
}
#region[取总行数]
/// <summary>
/// 取总行数
/// </summary>
/// <returns></returns>
private int GetRows()
{
int rows = this.drsSource.Length;
return rows;
}
#endregion
#region[取页数]
/// <summary>
/// 取页数
/// </summary>
/// <returns></returns>
private int GetPages()
{
int rows = GetRows();
this.pages = rows / this.pageSize;
int leave = rows % this.pageSize;
if (leave > 0)
{
this.pages++;
}
if (this.pages == 0)
{
this.pages = 1;
}
Session[SESSIONNAME_PAGES] = this.pages;
return this.pages;
}
#endregion
#region[显示行页信息]
/// <summary>
/// 显示行数
/// </summary>
private void ShowRows()
{
int rows = GetRows();
//int rowsOfCurrentPage = this.dsSource.Tables[0].Rows.Count;
// string pageLabel = "Current page:<STRONG><FONT color=/"red/">{0}</FONT></STRONG>rows,total:<STRONG><FONT color=/"red/">"+
// "{1}</FONT></STRONG>rows,<STRONG><FONT color=/"red/">{2}</FONT></STRONG>/<STRONG><FONT color=/"red/">{3}</FONT></STRONG>pages";
//
// this.lbPageLabel.Text = string.Format(pageLabel,rowsOfCurrentPage.ToString(),rows.ToString(),this.CurrentPageIndex.ToString(),this.Pages.ToString());
this.lbPageLabel.Text = string.Format("{0}/{1}", this.currentPageIndex.ToString(), this.pages.ToString());
}
#endregion
#region[重新查询事件]
/// <summary>
/// 重新查询事件
/// </summary>
public event EventHandler fresh;
/// <summary>
/// 重新查询事件
/// </summary>
/// <param name="e"></param>
protected void OnFresh(EventArgs e)
{
if (this.fresh != null)
{
fresh(this, e);
}
}
#endregion
#region[数据绑定]
/// <summary>
/// 数据绑定
/// </summary>
public void BindDg()
{
DataTable dt = this.dtSource;
this.drsSource = dt.Select(this.filter, this.orderByString);
GetPages();
ShowRows();
IniButton();
Session[SESSIONNAME_CURRENTPAGEINDEX] = this.currentPageIndex;
string controlType = this.bindControl.GetType().Name;
if (controlType == "GridView")
{
GridView dg = ((GridView)bindControl);
dg.DataSource = GetCurrentPage().DefaultView;
dg.DataBind();
}
else if (controlType == "Repeater")
{
Repeater rpt = ((Repeater)bindControl);
rpt.DataSource = GetCurrentPage().DefaultView;
rpt.DataBind();
}
else
{
}
this.txtPageIndex.Text = (CurrentPageIndex).ToString();
}
#endregion
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.btnFirst.Click += new System.Web.UI.ImageClickEventHandler(this.btnFirst_Click);
this.btnPrev.Click += new System.Web.UI.ImageClickEventHandler(this.btnPrev_Click);
this.btnNext.Click += new System.Web.UI.ImageClickEventHandler(this.btnNext_Click);
this.btnLast.Click += new System.Web.UI.ImageClickEventHandler(this.btnLast_Click);
this.btnGo.Click += new System.EventHandler(this.btnGo_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
#region[首页]
/// <summary>
/// 首页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnFirst_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
this.currentPageIndex = 1;
Session[SESSIONNAME_CURRENTPAGEINDEX] = this.currentPageIndex;
OnFresh(EventArgs.Empty);
}
#endregion
#region[上一页]
/// <summary>
/// 上一页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnPrev_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
this.currentPageIndex = CurrentPageIndex;
if (this.currentPageIndex > 1)
{
this.currentPageIndex--;
}
Session[SESSIONNAME_CURRENTPAGEINDEX] = this.currentPageIndex;
OnFresh(EventArgs.Empty);
}
#endregion
#region[下一页]
/// <summary>
/// 下一页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnNext_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
this.currentPageIndex = CurrentPageIndex;
this.pages = Pages;
if (this.currentPageIndex < this.pages)
{
this.currentPageIndex++;
this.SetPreOn(true);
}
Session[SESSIONNAME_CURRENTPAGEINDEX] = this.currentPageIndex;
OnFresh(EventArgs.Empty);
}
#endregion
#region[末页]
/// <summary>
/// 末页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnLast_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
this.currentPageIndex = CurrentPageIndex;
this.pages = Pages;
this.currentPageIndex = this.pages;
Session[SESSIONNAME_CURRENTPAGEINDEX] = this.currentPageIndex;
OnFresh(EventArgs.Empty);
}
#endregion
private void IniButton()
{
if (this.Pages == 1)//只有一页时,所有按按钮禁用
{
this.SetFirstOn(false);
this.SetLastOn(false);
this.SetNextOn(false);
this.SetPreOn(false);
this.btnGo.Enabled = false;
this.txtPageIndex.Enabled = false;
return;
}
if (this.currentPageIndex == 1)
{
this.SetFirstOn(false);
this.SetLastOn(true);
this.SetNextOn(true);
this.SetPreOn(false);
this.btnGo.Enabled = true;
this.txtPageIndex.Enabled = true;
return;
}
if (this.currentPageIndex < this.Pages)//由于=1的情况上面已经处理,这里相等代表是最后一页
{
this.SetFirstOn(true);
this.SetPreOn(true);
this.SetNextOn(true);
this.SetLastOn(true);
this.btnGo.Enabled = true;
this.txtPageIndex.Enabled = true;
}
else
{
this.SetFirstOn(true);
this.SetPreOn(true);
this.SetNextOn(false);
this.SetLastOn(false);
this.btnGo.Enabled = true;
this.txtPageIndex.Enabled = true;
}
}
#region[设置按钮的状态]
private void SetFirstOn(bool setValue)
{
if (setValue == true)
{
this.btnFirst.ImageUrl = "../image//first_on.gif";
btnFirst.Enabled = true;
}
else
{
this.btnFirst.ImageUrl = "../image//first_off.gif";
btnFirst.Enabled = false;
}
}
private void SetNextOn(bool setValue)
{
if (setValue == true)
{
this.btnNext.ImageUrl = "../image//next_on.gif";
btnNext.Enabled = true;
}
else
{
this.btnNext.ImageUrl = "../image//next_off.gif";
btnNext.Enabled = false;
}
}
private void SetLastOn(bool setValue)
{
if (setValue == true)
{
this.btnLast.ImageUrl = "../image//last_on.gif";
btnLast.Enabled = true;
}
else
{
this.btnLast.ImageUrl = "../image//last_off.gif";
btnLast.Enabled = false;
}
}
private void SetPreOn(bool setValue)
{
if (setValue == true)
{
this.btnPrev.ImageUrl = "../image//previous_on.gif";
btnPrev.Enabled = true;
}
else
{
this.btnPrev.ImageUrl = "../image//previous_off.gif";
btnPrev.Enabled = false;
}
}
#endregion
#region[跳转]
/// <summary>
/// 跳转
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnGo_Click(object sender, System.EventArgs e)
{
this.currentPageIndex = CurrentPageIndex;
this.pages = Pages;
this.txtPageIndex.Text.Trim().Replace(" ", "").Replace(" ", "");
if (this.txtPageIndex.Text == string.Empty)
{
this.txtPageIndex.Text = "1";
}
if (!Page.IsValid)
{
return;
}
this.currentPageIndex = int.Parse(this.txtPageIndex.Text);
if (this.currentPageIndex < 1)
{
this.currentPageIndex = 1;
}
if (this.currentPageIndex > this.pages)
{
this.currentPageIndex = this.pages;
}
Session[SESSIONNAME_CURRENTPAGEINDEX] = this.currentPageIndex;
OnFresh(EventArgs.Empty);
}
#endregion
#region[清空]
public void Clear()
{
Session[SESSIONNAME_CURRENTPAGEINDEX] = null;
//Session[SESSIONNAME_PAGES] = null;
//this.dtSource = null;
}
#endregion
#region[取当前页数据]
private DataTable GetCurrentPage()
{
int beginIndex = this.pageSize * (this.currentPageIndex - 1);
int endIndex = this.pageSize * this.currentPageIndex;
if (endIndex > this.GetRows())//开始大于行数时
{
endIndex = this.GetRows();
}
DataTable dtNew = this.dtSource.Copy();
dtNew.Clear();
DataRow[] drs = (DataRow[])this.drsSource;
for (int i = beginIndex; i < endIndex; i++)
{
object[] row = drs[i].ItemArray;
dtNew.Rows.Add(row);
}
dtNew.AcceptChanges();
return dtNew;
}
#endregion
}
}