1、moonPage.ascx:
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="moonPage.ascx.cs" Inherits="firstcs_03.moonPage" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<TABLE id="Table1" cellSpacing="1" cellPadding="1" width="98%" border="0">
<TR>
<TD align="right"><asp:linkbutton id="FirstPage" runat="server">[首页]</asp:linkbutton>
<asp:linkbutton id="PrevPage" runat="server">[上页]</asp:linkbutton>
<asp:linkbutton id="NextPage" runat="server">[下页]</asp:linkbutton>
<asp:linkbutton id="LastPage" runat="server">[末页]</asp:linkbutton>
<asp:literal id="Literal1" runat="server" Text="转到第"></asp:literal><asp:textbox id="NewPageIndex" runat="server" Width="31px" CssClass="input1"></asp:textbox><asp:literal id="Literal2" runat="server" Text="页"></asp:literal>
<asp:button id="NewPageGo" runat="server" Text="Go" CssClass="input1"></asp:button> </TD>
</TR>
</TABLE>
2、moonPage.ascx.cs
namespace firstcs_03
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
/**//// <summary>
/// moonPage 的摘要说明。
/// </summary>
public class moonPage : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.LinkButton FirstPage;
protected System.Web.UI.WebControls.LinkButton PrevPage;
protected System.Web.UI.WebControls.LinkButton NextPage;
protected System.Web.UI.WebControls.LinkButton LastPage;
protected System.Web.UI.WebControls.Literal Literal1;
protected System.Web.UI.WebControls.TextBox NewPageIndex;
protected System.Web.UI.WebControls.Literal Literal2;
protected System.Web.UI.WebControls.Button NewPageGo;
protected int currentpage;
protected int pagesize;
protected string proc;
protected System.Web.UI.WebControls.DataGrid datagrid;
#region 自定义
public int _CurrentPage
{
get
{
return currentpage;
}
set
{
currentpage = value;
}
}
public int _pageSize
{
get
{
return pagesize;
}
set
{
pagesize = value;
}
}
public string _proc
{
get
{
return proc;
}
set
{
proc = value;
}
}
public DataGrid _datagrid
{
get
{
return datagrid;
}
set
{
datagrid = value;
}
}
protected int rowcount;
#endregion
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
using(SqlConnection conn = new SqlConnection("uid=sa;pwd=sa;server=localhost;initial catalog=pubs;timeout=90"))
{
SqlCommand cmd = new SqlCommand("select count(*) as expr1 from authors",conn);
cmd.Connection.Open();
rowcount = (int)cmd.ExecuteScalar();
cmd.Connection.Close();
ViewState["rowscount"] = rowcount;
}
ViewState["currentpage"] = currentpage;
FillGrid(proc,currentpage,pagesize,datagrid);
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/**//// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.FirstPage.Click += new System.EventHandler(this.FirstPage_Click);
this.NextPage.Click += new System.EventHandler(this.NextPage_Click);
this.NewPageGo.Click += new System.EventHandler(this.NewPageGo_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void FillGrid(string proc,int currentpage,int pagesize,DataGrid datagrid)
{
using(SqlConnection conn = new SqlConnection("Uid=sa;pwd=sa;server=localhost;initial catalog=pubs;timeout=90"))
{
SqlCommand cmd = new SqlCommand(proc,conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@CurrentPage",currentpage);
cmd.Parameters.Add("@PageSize",pagesize);
cmd.Connection.Open();
SqlDataReader sdr = cmd.ExecuteReader();
datagrid.DataSource = sdr;
datagrid.DataBind();
sdr.Close();
cmd.Connection.Close();
}
}
//首页
private void FirstPage_Click(object sender, System.EventArgs e)
{
//disabled首页按钮和上一页按钮
FirstPage.Enabled = false;
PrevPage.Enabled = false;
currentpage = 0;
ViewState["currentpage"] = currentpage;
FillGrid(proc,currentpage,pagesize,datagrid);
//如果不止一页
if((int)ViewState["rowscount"]>((int)ViewState["currentpage"]+1)*pagesize)
{
NextPage.Enabled = true;
}
if((int)ViewState["rowscount"]>((int)ViewState["currentpage"]+1)*pagesize)
{
LastPage.Enabled = true;
}
}
//上一页
private void PrevPage_Click(object sender, System.EventArgs e)
{
NextPage.Enabled = true;
LastPage.Enabled = true;
currentpage = (int)ViewState["currentpage"]-1;
ViewState["currentpage"] = currentpage;
FillGrid(proc,currentpage,pagesize,datagrid);
//如果到首页则disabled首页和上一页按钮
if((int)ViewState["currentpage"]==0)
{
PrevPage.Enabled = false;
FirstPage.Enabled = false;
//return;
}
}
//下一页
private void NextPage_Click(object sender, System.EventArgs e)
{
ViewState["currentpage"] = (int)ViewState["currentpage"]+1;
currentpage = (int)ViewState["currentpage"];
FillGrid(proc,currentpage,pagesize,datagrid);
PrevPage.Enabled = true;
FirstPage.Enabled = true;
//如果已经到了最后一页
if(((int)ViewState["currentpage"]+1)*pagesize>(int)ViewState["rowscount"])
{
NextPage.Enabled = false;
LastPage.Enabled = false;
}
}
//末页
private void LastPage_Click(object sender, System.EventArgs e)
{
LastPage.Enabled = false;
NextPage.Enabled = false;
ViewState["currentpage"] = (int)Math.Ceiling((int)ViewState["rowscount"]/pagesize);
currentpage = (int)ViewState["currentpage"];
FillGrid(proc,currentpage,pagesize,datagrid);
//如果有不止一页的纪录
if((int)ViewState["currentpage"]>1)
{
FirstPage.Enabled = true;
PrevPage.Enabled = true;
}
//如果只有一页的纪录
else
{
FirstPage.Enabled = false;
PrevPage.Enabled = false;
}
}
//跳转
private void NewPage_Go(string i)
{
try
{
int PageIndex = Int32.Parse(i);
if (PageIndex<=0)
{
PageIndex = 0;
}
else
{
if(PageIndex>(int)Math.Ceiling((int)ViewState["rowscount"]/pagesize))
{
PageIndex = (int)Math.Ceiling((int)ViewState["rowscount"]/pagesize);
}
else
{
PageIndex--;
}
}
//简单起见,将所有的linkbutton全部改为enable=true
FirstPage.Enabled = true;
NextPage.Enabled = true;
LastPage.Enabled = true;
PrevPage.Enabled = true;
ViewState["currentpage"] = PageIndex;
FillGrid(proc,(int)ViewState["currentpage"],pagesize,datagrid);
}
catch(Exception)
{
return;
}
}
private void NewPageGo_Click(object sender, System.EventArgs e)
{
NewPage_Go(NewPageIndex.Text.Trim());
}
}
}
|