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
|