1.页面后台代码
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
ItemCount=GetItemCount(); //获取总记录数
PageSize=5; //设置每页显示多少条记录
NumSize=6; //设置分页按钮显示数量
if(ItemCount==0) //计算总页数
PageCount=1;
else
PageCount=ItemCount%PageSize==0?ItemCount/PageSize:ItemCount/PageSize+1;
PageURL=Request.Path; //获取当前页面的URL
string URLParameters="?Page="; //额外的URL参数设置
PageURL+=URLParameters;
Bind_PagerList();
}
string RequestPage=Request.QueryString["Page"];
if(RequestPage==null || RequestPage==string.Empty || int.Parse(RequestPage)<=0) //计算PageIndex
PageIndex=1;
else if(int.Parse(RequestPage)>PageCount)
PageIndex=PageCount;
else
PageIndex=int.Parse(RequestPage);
this.dlPager.SelectedIndex=PageIndex-1; //下拉列表选定项
Bind_Pager(); //绑定分页Panel所有按钮
Bind_DataList(); //数据绑定
}
private void Bind_Pager()
{
lnkFirst.NavigateUrl=PageURL+1;
lnkFirst.ToolTip="转到第1页";
lnkPrev.NavigateUrl=PageURL+(PageIndex-1);
lnkPrev.ToolTip="转到第"+(PageIndex-1)+"页";
lnkNext.NavigateUrl=PageURL+(PageIndex+1);
lnkNext.ToolTip="转到第"+(PageIndex+1)+"页";
lnkLast.NavigateUrl=PageURL+PageCount;
lnkLast.ToolTip="转到第"+PageCount+"页";
if(PageCount==1) //只有1页
{
lnkFirst.Enabled=false;
lnkPrev.Enabled=false;
lnkNext.Enabled=false;
lnkLast.Enabled=false;
} //多页
else if(PageIndex==1) //当前页为第一页
{
lnkFirst.Enabled=false;
lnkPrev.Enabled=false;
lnkNext.Enabled=true;
lnkLast.Enabled=true;
}
else if(PageIndex==PageCount) //当前页为最后页
{
lnkFirst.Enabled=true;
lnkPrev.Enabled=true;
lnkNext.Enabled=false;
lnkLast.Enabled=false;
}
else //中间任意页
{
lnkFirst.Enabled=true;
lnkPrev.Enabled=true;
lnkNext.Enabled=true;
lnkLast.Enabled=true;
}
HyperLink NumBtns;
int PageBase=PageIndex%NumSize==0?PageIndex/NumSize-1:PageIndex/NumSize;
for(int i=PageBase*NumSize+1;i<=(PageBase+1)*NumSize && i<=PageCount;i++) //分页按钮绑定 例如 1-10…,…11-20…...
{
if(i!=1 && i==PageBase*NumSize+1) //页标前的…
{
NumBtns = new HyperLink();
NumBtns.Text="…";
NumBtns.ToolTip="转到第"+(i-1)+"页";
NumBtns.NavigateUrl=PageURL+(i-1);
NumBtns.Enabled=true;
NumBtns.CssClass="pager";
lbPager.Controls.Add(NumBtns);
}
if(i==PageIndex) //当前页
{
NumBtns = new HyperLink();
NumBtns.Text=i.ToString();
NumBtns.Font.Bold=true;
NumBtns.ForeColor=Color.Red;
NumBtns.CssClass="pager";
lbPager.Controls.Add(NumBtns);
}
else //其他页
{
NumBtns = new HyperLink();
NumBtns.Text=i.ToString();
NumBtns.ToolTip="转到第"+i.ToString()+"页";
NumBtns.NavigateUrl=PageURL+i.ToString();
NumBtns.Enabled=true;
NumBtns.CssClass="pager";
lbPager.Controls.Add(NumBtns);
}
if(i!=PageCount && i==(PageBase+1)*NumSize) //页标后的…
{
NumBtns = new HyperLink();
NumBtns.Text="…";
NumBtns.ToolTip="转到第"+(i+1)+"页";
NumBtns.NavigateUrl=PageURL+(i+1);
NumBtns.Enabled=true;
NumBtns.CssClass="pager";
lbPager.Controls.Add(NumBtns);
}
}
}
private void Bind_DataList()
{
using(SqlConnection myconn=new SqlConnection(ConfigurationSettings.AppSettings["connStr"]))
{
SqlCommand mycmd=new SqlCommand("sp_Pager",myconn);
mycmd.CommandType=CommandType.StoredProcedure;
mycmd.Parameters.Add(new SqlParameter("@PageSize",SqlDbType.Int));
mycmd.Parameters["@PageSize"].Value=PageSize;
mycmd.Parameters.Add(new SqlParameter("@PageIndex",SqlDbType.Int));
mycmd.Parameters["@PageIndex"].Value=PageIndex;
myconn.Open();
this.DataList1.DataSource=mycmd.ExecuteReader();
this.DataList1.DataBind();
myconn.Close();
}
}
private void Bind_PagerList()
{
for(int i=1;i<=PageCount;i++)
{
dlPager.Items.Add(new ListItem("第"+i.ToString()+"页",i.ToString()));
}
dlPager.Attributes["OnChange"]="location.href="/"+PageURL+"'+this.value";
}
2.存储过程
CREATE PROCEDURE sp_Pager
(
@PageSize int, -- 一页显示记录数
@PageIndex int -- 当前页码(从1开始)
)
as
declare @strSQL nvarchar(1000) -- 主语句
if (@PageIndex=1)
begin
set @strSQL="select top "+str(@Pagesize)+" * from 数据表 order by 排序字段 desc"
end
else if(@PageIndex>1)
begin
set @strSQL="select top " + str(@PageSize) + " * from 数据表 where ( 自增字段 <
(select min (自增字段) from (select top "+ str(@PageSize*(@PageIndex-1)) + " 自增字段 from 数据表 order
by 自增字段 desc) as T )) order by 排序字段 desc"
end
exec(@strSQL)
GO