数据库:
USE [student]
GO/****** Object: StoredProcedure [dbo].[sp_Student_Select_by_Page_rowNumber] Script Date: 11/24/2011 20:49:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: lai
-- Create date: 2010-10-3
-- Description: 使用sql2005新增功能rownumber函数完成高效分页
ALTER PROCEDURE [dbo].[sp_Student_Select_by_Page_rowNumber]
@pageSize int, --每页记录数量
@pageCount int output, --总页数
@pageIndex int --当前页索引号
AS
BEGIN
declare @totalRecords int
select @totalRecords = count(sid) from student
if(@totalRecords % @pageSize = 0)
set @pageCount = @totalRecords / @pageSize;
else
set @pageCount = @totalRecords / @pageSize +1;
with temp as (select row_number() over (order by sid) as id,* from student)
select * from temp where id between (@pageIndex -1)*@pageSize +1 and @pageIndex * @pageSize
return @totalRecords
end
代码:
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
BindStudent(1);
}
private void BindStudent(int pageIndex)
{
using (SqlConnection sqlcnn = new SqlConnection("server=LENOVO-46E4091D\\SQLEXPRESS; initial catalog=student; integrated security=true;"))
{
SqlCommand sqlcmm = sqlcnn.CreateCommand();
sqlcmm.CommandText = "sp_Student_Select_by_Page_rowNumber";
sqlcmm.CommandType = System.Data.CommandType.StoredProcedure;
sqlcmm.Parameters.AddWithValue("@pageSize", 5);
sqlcmm.Parameters.Add("@pageCount", SqlDbType.Int).Direction =ParameterDirection.Output;
sqlcmm.Parameters.AddWithValue("@pageIndex", pageIndex);
SqlDataAdapter da = new SqlDataAdapter(sqlcmm);
DataSet ds = new DataSet();
da.Fill(ds);
this.GridView1.DataSource = ds.Tables[0];
this.GridView1.DataBind();
this.HiddenField1.Value = pageIndex.ToString();
this.HiddenField2.Value = sqlcmm.Parameters["@pageCount"].Value.ToString();
this.Label1.Text = pageIndex + "/" + this.HiddenField2.Value;
}
}
如果用的是按钮再分别写按钮的单击事件。
protected void Button1_Click(object sender, EventArgs e)//首页
{
this.BindStudent(1);
}
protected void Button2_Click(object sender, EventArgs e)//上一页
{
int index = Convert.ToInt32(this.HiddenField1.Value);
if (index > 0)
{
index--;
}
this.BindStudent(index);
}
protected void Button3_Click(object sender, EventArgs e)//下一页
{
int index = Convert.ToInt32(this.HiddenField1.Value);
int total = Convert.ToInt32(this.HiddenField2.Value);
if (index < total)
{
index++;
}
this.BindStudent(index);
}
protected void Button4_Click(object sender, EventArgs e)//最后一页
{
this.BindStudent(Convert.ToInt32(this.HiddenField2.Value));
}