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
|