Repeater自定义分页,使用的存储过程如下
- --取得总记录数
- ifexists(select1fromsys.objectswherename='GetProductsCount'andtype='P')
- dropprocGetProductsCount
- go
- CREATEPROCEDUREGetProductsCount
- as
- selectcount(*)fromproducts
- go
- --使用row_number函数
- --SQLServer2005的新特性,它可以将记录根据一定的顺序排列,每条记录和一个等级相关这个等级可以用来作为每条记录的rowindex.
- ifexists(select1fromsys.objectswherename='GetProductsByPage'andtype='P')
- dropprocGetProductsByPage
- go
- CREATEPROCEDUREGetProductsByPage
- @PageNumberint,
- @PageSizeint
- AS
- selectProductID,ProductName,SupplierID,CategoryID,QuantityPerUnit,UnitPrice,UnitsInStock,UnitsOnOrder,ReorderLevel,Discontinued
- from
- (selectrow_number()Over(orderbyproductid)asrow,ProductID,ProductName,SupplierID,CategoryID,QuantityPerUnit,UnitPrice,UnitsInStock,UnitsOnOrder,ReorderLevel,Discontinued
- fromproducts)asProductsWithRowNumber
- whererowbetween(@PageNumber-1)*@PageSize+1and@PageNumber*@PageSize
- go
- --execGetProductsByPage1,10
- --execGetProductsByPage5,10
页面代码如下:
- <asp:linkbuttonid="lbtnFirst"runat="server"commandname="First"oncommand="lbtnPage_Command">|<</asp:linkbutton>
- <asp:linkbuttonid="lbtnPrevious"runat="server"commandname="Previous"oncommand="lbtnPage_Command"><<</asp:linkbutton>
- <asp:labelid="lblMessage"runat="server">
- <asp:linkbuttonid="lbtnNext"runat="server"commandname="Next"oncommand="lbtnPage_Command">>></asp:linkbutton>
- <asp:linkbuttonid="lbtnLast"runat="server"commandname="Last"oncommand="lbtnPage_Command">>|</asp:linkbutton>
- 转到第<asp:dropdownlistid="dropPage"runat="server"autopostback="True"onselectedindexchanged="dropPage_SelectedIndexChanged"></asp:dropdownlist>页
- </asp:label>
后台代码如下:
- usingSystem;
- usingSystem.Collections;
- usingSystem.Configuration;
- usingSystem.Data;
- usingSystem.Web;
- usingSystem.Web.Security;
- usingSystem.Web.UI;
- usingSystem.Web.UI.HtmlControls;
- usingSystem.Web.UI.WebControls;
- usingSystem.Web.UI.WebControls.WebParts;
- usingSystem.Data.SqlClient;
- publicpartialclassRepeaterPaging:System.Web.UI.Page
- {
- //每页显示的最多记录的条数
- privateintpageSize=10;
- //当前页号
- privateintcurrentPageNumber;
- //显示数据的总条数
- privatestaticintrowCount;
- //总页数
- privatestaticintpageCount;
- protectedvoidPage_Load(objectsender,EventArgse)
- {
- if(!IsPostBack)
- {
- SqlConnectioncn=newSqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString);
- SqlCommandcmd=newSqlCommand("GetProductsCount",cn);
- cmd.CommandType=CommandType.StoredProcedure;
- cn.Open();
- rowCount=(int)cmd.ExecuteScalar();
- cn.Close();
- pageCount=(rowCount-1)/pageSize+1;
- currentPageNumber=1;
- for(inti=1;i<=pageCount;i++)
- {
- dropPage.Items.Add(newListItem(i.ToString(),i.ToString()));
- }
- dropPage.SelectedValue=dropPage.Items.FindByValue(currentPageNumber.ToString()).Value;
- Query();
- }
- }
- protectedvoidsdsProducts_Selecting(objectsender,SqlDataSourceSelectingEventArgse)
- {
- sdsProducts.SelectParameters["PageNumber"].DefaultValue=currentPageNumber.ToString();
- sdsProducts.SelectParameters["PageSize"].DefaultValue=pageSize.ToString();
- }
- protectedvoidsdsProducts_Selected(objectsender,SqlDataSourceStatusEventArgse)
- {
- lblMessage.Text="共找到"+rowCount+"条记录,当前第"+currentPageNumber+"/"+pageCount+"页";
- }
- protectedvoidlbtnPage_Command(objectsender,CommandEventArgse)
- {
- switch(e.CommandName)
- {
- case"First":
- currentPageNumber=1;
- break;
- case"Previous":
- currentPageNumber=(int)ViewState["currentPageNumber"]-1>1?(int)ViewState["currentPageNumber"]-1:1;
- break;
- case"Next":
- currentPageNumber=(int)ViewState["currentPageNumber"]+1<pageCount?(int)ViewState["currentPageNumber"]+1:pageCount;
- break;
- case"Last":
- currentPageNumber=pageCount;
- break;
- }
- dropPage.SelectedValue=dropPage.Items.FindByValue(currentPageNumber.ToString()).Value;
- Query();
- }
- protectedvoiddropPage_SelectedIndexChanged(objectsender,EventArgse)
- {
- currentPageNumber=int.Parse(dropPage.SelectedValue);
- Query();
- }
- privatevoidQuery()
- {
- ViewState["currentPageNumber"]=currentPageNumber;
- SetButton(currentPageNumber);
- sdsProducts.Select(DataSourceSelectArguments.Empty);
- }
- privatevoidSetButton(intcurrentPageNumber)
- {
- lbtnFirst.Enabled=currentPageNumber!=1;
- lbtnPrevious.Enabled=currentPageNumber!=1;
- lbtnNext.Enabled=currentPageNumber!=pageCount;
- lbtnLast.Enabled=currentPageNumber!=pageCount;
- }
- }
页面效果如下
![Repeater分页效果图](https://p-blog.csdn.net/images/p_blog_csdn_net/amandag/EntryImages/20080716/RepeaterPaging.jpg)