Repeater控件的分页方法有几种:
1.使用第三方控件
2.使用.NET提供的一个支持分页的类 PagedDataSource
3.使用DbDataAdapter的一个重载方法DbDataAdapter.Fill(DataSet dataset,int startRecord,int maxRecord,string srcTable).
我个人觉得这些方法都不是很好,用第三方控件容易使人产生惰性,而PagedDataSource和DbDataAdapter重载的方法则效率不是很高,特别是在大数据量的情况下执行的速度更是不可接受.我们应该把分页的任务由数据库来执行,所以这里选择用SQL语句执行分页.
使用SQL语句分页的思想为:用SQL语句查询出当前页码下要显示(且只查出当前页码下要显示)的记录.
下面是具体的aspx.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;
public partial class _Default : System.Web.UI.Page
{
static db db1 = new db(); //实例化一个db类
static SqlConnection conn = db1.returnConn(); //获得全局的连接conn
static int pageSize = 10; //每页显示的数量
static int pageCount = returnPageCount(); //页码总数
protected void Page_Load(object sender, EventArgs e)
{
int curPage = 1;
if (Request.QueryString["page"] != null)
{
//判断传入的参数是否为数字
try
{
curPage = Convert.ToInt32(Request.QueryString["page"]);
}
catch
{
curPage = 1;
}
}
bindToList(curPage);
}
//绑定函数
protected void bindToList(int curPage)
{
//先把所有的LinkButton都设置为可用
this.hlFirst.Enabled = true;
this.hlPrev.Enabled = true;
this.hlNext.Enabled = true;
this.hlLast.Enabled = true;
//检查传入的curPage是否合法,并填充当前页的值,以及控制HyperLink的可用
this.hlLast.NavigateUrl = "Default.aspx?page=" + pageCount.ToString();
int nextPage = curPage + 1;
this.hlNext.NavigateUrl = "Default.aspx?page=" + nextPage.ToString();
int prevPage = curPage - 1;
this.hlPrev.NavigateUrl = "Default.aspx?page=" + prevPage.ToString();
if(curPage<=1)
{
curPage=1;
this.hlFirst.Enabled = false;
this.hlPrev.Enabled = false;
}
if (curPage >= pageCount)
{
curPage = pageCount;
this.hlNext.Enabled = false;
this.hlLast.Enabled = false;
}
this.lblCurPage.Text = curPage.ToString();
//实例化查询语句
string sqlStr="";
if(curPage==1)
{