下面我通过一个实例来演示一下AspNetPager控件的使用方法。
aspx页面的代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>AspNetPager Demo</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Repeater runat="server" ID="rptProduct"> <HeaderTemplate> <table> <tr> <td> 产品名称</td> <td> 单价</td> <td> 剩余量</td> </tr> </HeaderTemplate> <ItemTemplate> <tr> <td> <%#Eval("ProductName") %> </td> <td> <%#Eval("UnitPrice") %> </td> <td> <%#Eval("UnitsInStock") %> </td> </tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:Repeater> <webdiyer:AspNetPager ID="anpProducts" runat="server" PageSize="5" OnPageChanged="anpProducts_PageChanged"> </webdiyer:AspNetPager> </div> </form> </body> </html>
cs代码:
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.SqlClient; using System.Text; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) BindPage(); } /// <summary> /// 分页方法 /// </summary> /// <param name="pageSize">每页内容量</param> /// <param name="pageIndex">请求页码</param> /// <param name="count">数据总量</param> /// <returns>请求页数据</returns> private DataTable GetProducts(int pageSize,int pageIndex,out int count) { string connStr = "Data Source=.;Initial Catalog=Northwind.MDF;Integrated Security=True"; string sqlStr = "select count(*) from Products"; StringBuilder sqlBuilder = new StringBuilder(); sqlBuilder.Append(string.Format("select top {0} ProductID,ProductName,UnitPrice,UnitsInStock from Products ",pageSize)); sqlBuilder.Append("where ProductID not in "); sqlBuilder.Append(string.Format("(select top {0} ProductID from Products)",pageSize * (pageIndex - 1))); DataSet ds = new DataSet(); using (SqlConnection conn = new SqlConnection(connStr)) { //获取分页数据 SqlDataAdapter adapter = new SqlDataAdapter(sqlBuilder.ToString(),conn); adapter.Fill(ds, "ProductsTable"); //获取数据总量 SqlCommand cmd = new SqlCommand(sqlStr, conn); conn.Open(); count = int.Parse(cmd.ExecuteScalar().ToString()); conn.Close(); } return ds.Tables["ProductsTable"]; } private void BindPage() { int count = 0; this.rptProduct.DataSource = GetProducts(this.anpProducts.PageSize,this.anpProducts.CurrentPageIndex,out count); this.anpProducts.RecordCount = count; this.rptProduct.DataBind(); } protected void anpProducts_PageChanged(object sender, EventArgs e) { BindPage(); } }
通过aspnetpager的RecordCount属性获取需要展示的数据总量,由此aspnetpager自动计算页数。如果不指定该属性,aspnetpager将根据绑定到数据展示控件的数据量以及aspnetpager的PageSize属性计算总页数。
需要为aspnetpager的PageChanged事件提供数据绑定方法,这样才会在翻页后显示下一页数据。
在DAL需要提供分页方法。