Repeater加AspNetPager通过存储过程实现分页

存储过程:

代码
   
     
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- 参数说明 -------------------------------------------------------------
/**//*
@strTable --要显示的表或多个表的连接
@strField --要查询出的字段列表,*表示全部字段
@intTop --最多读取记录数
@pageSize --每页显示的记录个数
@pageIndex --要显示那一页的记录
@strWhere --查询条件,不需where
@strSortKey --用于排序的主键
@strSortField --用于排序,如:id desc (多个id desc,dt asc)
@strOrderBy --排序,0-顺序,1-倒序
@pageCount --查询结果分页后的总页数
@RecordCount --查询到的总记录数
@UsedTime --耗时测试时间差
*/
CREATE PROCEDURE [dbo].[ThePagerIndex]
@strTable varchar(
50 ) = ' [dbo].[ttable] ' ,
@strField varchar(
50 ) = ' * ' ,
@intTop
int = 5000 ,
@pageSize
int = 20 ,
@pageIndex
int = 1 ,
@strWhere varchar(
50 ) = ' 1=1 ' ,
@strSortKey varchar(
50 ) = ' id ' ,
@strSortField varchar(
50 ) = ' id DESC ' ,
@strOrderBy bit
= 1 ,
@pageCount
int OUTPUT,
@RecordCount
int OUTPUT
-- @UsedTime int OUTPUT
AS
SET NOCOUNT ON
Declare @sqlcount INT
Declare @timediff DATETIME
select @timediff
= getdate()
Begin Tran
DECLARE @sql nvarchar(max),@where1 varchar(max),@where2 varchar(max)
IF @strWhere
is null or rtrim(@strWhere) = ''
BEGIN
-- 没有查询条件
SET @where1
= ' WHERE '
SET @where2
= ' '
END
ELSE
BEGIN
-- 有查询条件
SET @where1
= ' WHERE ( ' + @strWhere + ' ) AND ' -- 本来有条件再加上此条件
SET @where2
= ' WHERE ( ' + @strWhere + ' ) ' -- 原本没有条件而加上此条件
END
-- SET @sql = ' SELECT @intResult=COUNT(*) FROM ' + @strTable + @where2
IF @intTop
<= 0
BEGIN
SET @sql
= ' SELECT @sqlcount=COUNT(*) FROM (select ' + @strSortKey + ' from ' + @strTable + @where2 + ' ) As tmptab '
END
ELSE
BEGIN
SET @sql
= ' SELECT @sqlcount=COUNT(*) FROM (select top ' + cast(@intTop as varchar(max)) + ' ' + @strSortKey + ' from ' + @strTable + @where2 + ' ) As tmptab '
END
-- print @sql

EXEC sp_executesql @sql,N
' @sqlcount int OUTPUT ' ,@sqlcount OUTPUT -- 计算总记录数
SELECT @pageCount
= CEILING((@sqlcount + 0.0 ) / @pageSize) -- 计算总页数
SELECT @RecordCount
= @sqlcount -- 设置总记录数
IF @pageIndex
= 1 -- 第一页
BEGIN
SET @sql
= ' SELECT TOP ' + CAST(@pageSize AS varchar(max)) + ' ' + @strField + ' FROM ' + @strTable +
@where2
+ ' ORDER BY ' + @strSortField
END
Else
BEGIN
IF @strOrderBy
= 0
SET @sql
= ' SELECT TOP ' + CAST(@pageSize AS varchar(max)) + ' ' + @strField + ' FROM ' + @strTable + @where1 + @strSortKey + ' >(SELECT MAX( ' + @strSortKey + ' ) ' + ' FROM (SELECT TOP ' + CAST(@pageSize * (@pageIndex - 1 ) AS varchar(max)) + ' ' +
@strSortKey
+ ' FROM ' + @strTable + @where2 + ' ORDER BY ' + @strSortField + ' ) t) ORDER BY ' + @strSortField
ELSE
SET @sql
= ' SELECT TOP ' + CAST(@pageSize AS varchar(max)) + ' ' + @strField + ' FROM ' + @strTable + @where1 + @strSortKey + ' <(SELECT MIN( ' + @strSortKey + ' ) ' + ' FROM (SELECT TOP ' + CAST(@pageSize * (@pageIndex - 1 ) AS varchar(max)) + ' ' +
@strSortKey
+ ' FROM ' + @strTable + @where2 + ' ORDER BY ' + @strSortField + ' ) t) ORDER BY ' + @strSortField + ''
END
EXEC(@sql)
-- print @sql
If @@Error
<> 0
Begin
RollBack Tran
Return
- 1
End
Else
Begin
Commit TRAN
-- set @UsedTime = datediff(ms,@timediff,getdate())
-- select datediff(ms,@timediff,getdate()) as 耗时
Return @sqlcount
End


实体对象类:

代码
   
     
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

/// <summary>
/// Question_model 的摘要说明
/// </summary>
public class Question_model
{
public Question_model()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
int qid;

public int Qid
{
get { return qid; }
set { qid = value; }
}
string qtitle;

public string Qtitle
{
get { return qtitle; }
set { qtitle = value; }
}

}

 

 数据访问层 Question_bll.cs类

代码
   
     
public IList < Question_model > GetPage( int pageindex, int _pageSize, out int pageCount, out int RecordCount)
{
pageCount
= 0 ;
RecordCount
= 0 ;
IList
< Question_model > list = new List < Question_model > ();
using (SqlConnection conn = new SqlConnection(PubConstant.ConnectionString))
{
SqlCommand objcmd
= new SqlCommand( " .ThePagerIndex " , conn);

objcmd.CommandType
= CommandType.StoredProcedure;

SqlParameter[] para
= {

new SqlParameter( " @strTable " ,SqlDbType.VarChar, - 1 ),

new SqlParameter( " @strField " ,SqlDbType.VarChar, - 1 ),

new SqlParameter( " @pageSize " ,SqlDbType.Int),

new SqlParameter( " @pageIndex " ,SqlDbType.Int),

new SqlParameter( " @strSortKey " ,SqlDbType.VarChar, - 1 ),

new SqlParameter( " @strSortField " ,SqlDbType.VarChar, - 1 ),

new SqlParameter( " @strOrderBy " ,SqlDbType.Bit),

new SqlParameter( " @pageCount " ,SqlDbType.Int),

new SqlParameter( " @RecordCount " ,SqlDbType.Int),

new SqlParameter( " @inttop " ,SqlDbType.Int, - 1 )

};

para[
0 ].Value = " question " ;

para[
1 ].Value = " * " ;

para[
2 ].Value = _pageSize;

para[
3 ].Value = pageindex;

para[
4 ].Value = " qid " ;

para[
5 ].Value = " qtime desc " ;

para[
6 ].Value = 1 ;

para[
7 ].Value = pageCount;

para[
7 ].Direction = ParameterDirection.Output;

para[
8 ].Value = RecordCount;

para[
8 ].Direction = ParameterDirection.Output;

para[
9 ].Value = - 1 ;

objcmd.Parameters.AddRange(para);

conn.Open();

using (SqlDataReader reader = objcmd.ExecuteReader(CommandBehavior.CloseConnection))
{

while (reader.Read())

{

Question_model model
= new Question_model();

model.Qid
= Convert.ToInt32(reader[ " qid " ]);

model.Qtitle
= Convert.ToString(reader[ " qtitle " ]);

list.Add(model);
}

}
RecordCount
= Convert.ToInt32(objcmd.Parameters[ " @RecordCount " ].Value);
pageCount
= Convert.ToInt32(objcmd.Parameters[ " @pageCount " ].Value);
conn.Close();

conn.Dispose();

}
return list;
}


aspx代码:

代码
   
     
< div >
< asp:Repeater ID = " Repeater1 " runat = " server " >
< HeaderTemplate >
分页测试
< br />
</ HeaderTemplate >
< ItemTemplate >
< span style = " width:100 " > 编号: <% #Eval( " qid " ) %>& nbsp; & nbsp; & nbsp; & nbsp; <% #Eval( " qtitle " ) %></ span >< br />
</ ItemTemplate >
< FooterTemplate >
< asp:Label ID = " lblFooterTemplate " runat = " server " Text = " 无相关数据 " Visible = " <%#bool.Parse((Repeater1.Items.Count==0).ToString())%> " ></ asp:Label >
</ FooterTemplate >
</ asp:Repeater >
< webdiyer:AspNetPager ID = " AspNetPager1 " runat = " server " OnPageChanged = " PageChanged " FirstPageText = " 首页 " LastPageText = " 尾页 "
NextPageText
= " 下一页 " PrevPageText = " 上一页 " ShowInputBox = " Always " Font - Size = " 13px " ShowPageIndexBox = " Never " PageSize = " 5 " >
</ webdiyer:AspNetPager >
</ div >


aspx.cs代码:

代码
   
     
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class Page_Test2 : System.Web.UI.Page
{
protected void Page_Load( object sender, EventArgs e)
{
if ( ! IsPostBack)
{
Bind();
}
}

private readonly Question_bll bll = new Question_bll();

int currPage = 1 ;
int PageSize = 5 ;

public void Bind()
{

int pageCount;
int RecordCount;

Repeater1.DataSource
= bll.GetPage(currPage, PageSize, out pageCount, out RecordCount);

Repeater1.DataBind();

this .AspNetPager1.RecordCount = RecordCount;

this .AspNetPager1.CurrentPageIndex = currPage;

this .AspNetPager1.PageSize = PageSize;

}
protected void PageChanged( object sender, EventArgs e)
{

int pageCount;
int RecordCount;

Repeater1.DataSource
= bll.GetPage( this .AspNetPager1.CurrentPageIndex, PageSize, out pageCount, out RecordCount);

Repeater1.DataBind();

}
}


转载:http://hi.baidu.com/wwaityuan/blog/item/4ef3c10bb81d0e32b0351d21.html

你可能感兴趣的:(PAGER)