Repeater自定义分页

来源:互联网 发布:河南省公务员网络课程 编辑:程序博客网 时间:2024/05/09 06:59
 

Repeater自定义分页,使用的存储过程如下

  1. --取得总记录数   
  2. if exists(select 1 from sys.objects where name = 'GetProductsCount' and type = 'P')   
  3.     drop proc GetProductsCount   
  4. go   
  5. CREATE PROCEDURE GetProductsCount   
  6. as  
  7.     select count(*) from products   
  8. go   
  9. --使用row_number函数   
  10. --SQL Server 2005的新特性,它可以将记录根据一定的顺序排列,每条记录和一个等级相关 这个等级可以用来作为每条记录的row index.   
  11. if exists(select 1 from sys.objects where name = 'GetProductsByPage' and type = 'P')   
  12.     drop proc GetProductsByPage   
  13. go   
  14. CREATE PROCEDURE GetProductsByPage   
  15.     @PageNumber int,   
  16.     @PageSize   int  
  17. AS  
  18.     select ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued   
  19.     from  
  20.     (select row_number() Over (order by productid) as row,ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued   
  21.     from products) as ProductsWithRowNumber   
  22.     where row between (@PageNumber - 1) * @PageSize + 1 and @PageNumber * @PageSize   
  23. go   
  24.   
  25. --exec GetProductsByPage 1, 10   
  26. --exec GetProductsByPage 5, 10  

页面代码如下:

  1. <ASP:LINKBUTTON id=lbtnFirst OnCommand="lbtnPage_Command" CommandName="First" runat="server">|<</ASP:LINKBUTTON>     
  2. <ASP:LINKBUTTON id=lbtnPrevious OnCommand="lbtnPage_Command" CommandName="Previous" runat="server"><<</ASP:LINKBUTTON>  
  3. <ASP:LABEL id=lblMessage runat="server" />     
  4. <ASP:LINKBUTTON id=lbtnNext OnCommand="lbtnPage_Command" CommandName="Next" runat="server">>></ASP:LINKBUTTON>     
  5. <ASP:LINKBUTTON id=lbtnLast OnCommand="lbtnPage_Command" CommandName="Last" runat="server">>|</ASP:LINKBUTTON>     
  6. 转到第<ASP:DROPDOWNLIST id=dropPage runat="server" OnSelectedIndexChanged="dropPage_SelectedIndexChanged" AutoPostBack="True"></ASP:DROPDOWNLIST>页       
Repeater

后台代码如下:

  1. using System;   
  2. using System.Collections;   
  3. using System.Configuration;   
  4. using System.Data;   
  5. using System.Web;   
  6. using System.Web.Security;   
  7. using System.Web.UI;   
  8. using System.Web.UI.HtmlControls;   
  9. using System.Web.UI.WebControls;   
  10. using System.Web.UI.WebControls.WebParts;   
  11. using System.Data.SqlClient;   
  12.   
  13. public partial class RepeaterPaging : System.Web.UI.Page   
  14. {   
  15.     //每页显示的最多记录的条数   
  16.     private int pageSize = 10;   
  17.     //当前页号   
  18.     private int currentPageNumber;   
  19.     //显示数据的总条数   
  20.     private static int rowCount;   
  21.     //总页数   
  22.     private static int pageCount;   
  23.   
  24.     protected void Page_Load(object sender, EventArgs e)   
  25.     {   
  26.         if (!IsPostBack)   
  27.         {   
  28.             SqlConnection cn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString);   
  29.   
  30.             SqlCommand cmd = new SqlCommand("GetProductsCount", cn);   
  31.             cmd.CommandType = CommandType.StoredProcedure;   
  32.             cn.Open();   
  33.             rowCount = (int)cmd.ExecuteScalar();   
  34.             cn.Close();   
  35.             pageCount = (rowCount - 1) / pageSize + 1;   
  36.             currentPageNumber = 1;   
  37.   
  38.             for (int i = 1; i <= pageCount; i++)   
  39.             {   
  40.                 dropPage.Items.Add(new ListItem(i.ToString(), i.ToString()));   
  41.             }   
  42.             dropPage.SelectedValue = dropPage.Items.FindByValue(currentPageNumber.ToString()).Value;   
  43.             Query();   
  44.         }   
  45.     }   
  46.   
  47.     protected void sdsProducts_Selecting(object sender, SqlDataSourceSelectingEventArgs e)   
  48.     {   
  49.         sdsProducts.SelectParameters["PageNumber"].DefaultValue = currentPageNumber.ToString();   
  50.         sdsProducts.SelectParameters["PageSize"].DefaultValue = pageSize.ToString();   
  51.     }   
  52.   
  53.     protected void sdsProducts_Selected(object sender, SqlDataSourceStatusEventArgs e)   
  54.     {   
  55.         lblMessage.Text = "共找到" + rowCount + "条记录, 当前第" + currentPageNumber + "/" + pageCount + "页";   
  56.     }   
  57.   
  58.     protected void lbtnPage_Command(object sender, CommandEventArgs e)   
  59.     {   
  60.         switch (e.CommandName)   
  61.         {   
  62.             case "First":   
  63.                 currentPageNumber = 1;   
  64.                 break;   
  65.             case "Previous":   
  66.                 currentPageNumber = (int)ViewState["currentPageNumber"] - 1 > 1 ? (int)ViewState["currentPageNumber"] - 1 : 1;   
  67.                 break;   
  68.             case "Next":   
  69.                 currentPageNumber = (int)ViewState["currentPageNumber"] + 1 < pageCount ? (int)ViewState["currentPageNumber"] + 1 : pageCount;   
  70.                 break;   
  71.             case "Last":   
  72.                 currentPageNumber = pageCount;   
  73.                 break;   
  74.         }   
  75.         dropPage.SelectedValue = dropPage.Items.FindByValue(currentPageNumber.ToString()).Value;   
  76.         Query();   
  77.     }   
  78.   
  79.     protected void dropPage_SelectedIndexChanged(object sender, EventArgs e)   
  80.     {   
  81.         currentPageNumber = int.Parse(dropPage.SelectedValue);   
  82.         Query();   
  83.     }   
  84.   
  85.     private void Query()   
  86.     {   
  87.         ViewState["currentPageNumber"] = currentPageNumber;   
  88.         SetButton(currentPageNumber);   
  89.         sdsProducts.Select(DataSourceSelectArguments.Empty);   
  90.     }   
  91.   
  92.     private void SetButton(int currentPageNumber)   
  93.     {   
  94.         lbtnFirst.Enabled = currentPageNumber != 1;   
  95.         lbtnPrevious.Enabled = currentPageNumber != 1;   
  96.         lbtnNext.Enabled = currentPageNumber != pageCount;   
  97.         lbtnLast.Enabled = currentPageNumber != pageCount;   
  98.     }   
  99. }  

页面效果如下

Repeater分页效果图
原创粉丝点击