<webdiyer:AspNetPager
ID="AspNetPager1"
runat="server"
HorizontalAlign="Center"
OnPageChanged="AspNetPager1_PageChanged"
Width="100%"
FirstPageText="首页"
NextPageText="下一页"
PrevPageText="上一页"
LastPageText="尾页"
AlwaysShow="True"
></webdiyer:AspNetPager>

后台绑定代码:

void Bind()
{
int pageSize = ;
XieKe.BLL.Content con = new XieKe.BLL.Content();
PageBase pb = new PageBase();
pb.OrderType = ;//0 升序;1 降序
pb.PageIndex = this.AspNetPager1.CurrentPageIndex;
pb.PageSize = pageSize;
pb.ProcedureName = "pagination";
pb.StrWhere = " ";
pb.StrGetFields = "*";
pb.FldName = "id";
pb.TblName = "tb_ReceiveRecord"; int count = ;//总条数
pb.DoCount = ; //表示只获取总数
con.GetList(pb, ref count);
pb.DoCount = ; //表示获取数据
DataTable dt = con.GetList(pb, ref count).Tables[];
this.Repeater1.DataSource = dt;
this.Repeater1.DataBind();
//数据分页
AspNetPager1.PageSize = pageSize;
AspNetPager1.RecordCount = count;
if (count <= pb.PageSize)
AspNetPager1.Visible = false;
else
AspNetPager1.Visible = true;
}

DAL层调用代码:

        /// <summary>
/// 分页获取数据列表
/// </summary>
/// <param name="pb">分页基本信息</param>
/// <param name="count">返回总条数</param>
/// <returns></returns>
public DataSet GetList(XieKe.Model.PageBase pb, ref int count)
{
SqlParameter[] parameters =
{
new SqlParameter("@tblName", SqlDbType.NVarChar, ),
new SqlParameter("@strGetFields", SqlDbType.VarChar, ),
new SqlParameter("@fldName", SqlDbType.NVarChar, ),
new SqlParameter("@PageSize", SqlDbType.Int),
new SqlParameter("@PageIndex", SqlDbType.Int),
new SqlParameter("@doCount", SqlDbType.Int),
new SqlParameter("@OrderType", SqlDbType.Int),
new SqlParameter("@strWhere", SqlDbType.NVarChar,),
};
parameters[].Value = pb.TblName;
parameters[].Value = pb.StrGetFields;
parameters[].Value = pb.FldName;
parameters[].Value = pb.PageSize;
parameters[].Value = pb.PageIndex;
parameters[].Value = pb.DoCount;
parameters[].Value = pb.OrderType;
parameters[].Value = pb.StrWhere; DataSet ds = new DataSet();
ds = RunProcedure(pb.ProcedureName, parameters, "ds");
if (pb.DoCount == )
{
if (ds.Tables.Count == )
count = Convert.ToInt32(ds.Tables[].Rows[][].ToString());
}
return ds;
} /// <summary>
/// 执行存储过程
/// </summary>
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <param name="tableName">DataSet结果中的表名</param>
/// <returns>DataSet</returns>
public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
DataSet dataSet = new DataSet();
connection.Open();
SqlDataAdapter sqlDA = new SqlDataAdapter();
sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
sqlDA.Fill(dataSet, tableName);
connection.Close();
return dataSet;
}
} /// <summary>
/// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值)
/// </summary>
/// <param name="connection">数据库连接</param>
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <returns>SqlCommand</returns>
private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
{
SqlCommand command = new SqlCommand(storedProcName, connection);
command.CommandType = CommandType.StoredProcedure;
foreach (SqlParameter parameter in parameters)
{
if (parameter != null)
{
// 检查未分配值的输出参数,将其分配以DBNull.Value.
if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
(parameter.Value == null))
{
parameter.Value = DBNull.Value;
}
command.Parameters.Add(parameter);
}
} return command;
}
    /// <summary>
/// 分页实体类
/// </summary>
public class PageBase
{
private string _orderName; public string OrderName
{
get { return _orderName; }
set { _orderName = value; }
} private string tblName; /// <summary>
/// 需要查询的表名 仅限单表查询
/// </summary>
public string TblName
{
get { return tblName; }
set { tblName = value; }
} private string strGetFields = "*"; /// <summary>
/// 显示字段
/// </summary>
public string StrGetFields
{
get { return strGetFields; }
set { strGetFields = value; }
}
private string fldName; /// <summary>
/// 主键名称
/// </summary>
public string FldName
{
get { return fldName; }
set { fldName = value; }
} private int pageSize = ;
/// <summary>
/// 每页显示多少记录数
/// </summary>
public int PageSize
{
get { return pageSize; }
set { pageSize = value; }
} private int pageIndex = ;
/// <summary>
/// 当前页数
/// </summary>
public int PageIndex
{
get { return pageIndex; }
set { pageIndex = value; }
}
private int doCount = ;
/// <summary>
/// 排序类型0显示记录列表,1返回总条数
/// </summary>
public int DoCount
{
get { return doCount; }
set { doCount = value; }
}
private int orderType = ; /// <summary>
/// 排序方式0正序、1倒序
/// </summary>
public int OrderType
{
get { return orderType; }
set { orderType = value; }
}
private string strWhere; /// <summary>
/// SQL语句的条件
/// </summary>
public string StrWhere
{
get { return strWhere; }
set { strWhere = value; }
}
private string procedureName;
/// <summary>
/// 存储过程名称
/// </summary>
public string ProcedureName
{
get { return procedureName; }
set { procedureName = value; }
}
}

分页所需类文件

sql存储过程:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go ALTER PROCEDURE [dbo].[pagination]
@tblName varchar(4000), -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列
@fldName varchar(255)='', -- 排序的字段名(可包含如TABLE.FLDNAME形式)
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@doCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL varchar(5000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
declare @fldName_t varchar(255) -- 在分页时用的排序字段名,不包含多表并列时的表名
set @fldName_t = right(@fldName,len(@fldName) - CHARINDEX('.',@fldName))
if @doCount != 0
begin
if @strWhere !=''
set @strSQL = 'select count(*) as Total from (select '+ @strGetFields +' from ' + @tblName + ' where '+@strWhere +') as A' --该写法解决带 group by 的问题
else
set @strSQL = 'select count(*) as Total from (select '+ @strGetFields +' from ' + @tblName + ') as A'
end
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
else
begin
if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by ' + @fldName +' desc'
--如果@OrderType不是0,就执行降序,这句很重要!
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by ' + @fldName +' asc'
end
if @PageIndex = 1 or @PageIndex=0
begin
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrder
else
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @tblName + ' '+ @strOrder
--如果是第一页就执行以上代码,这样会加快执行速度
end
else
begin
--以下代码赋予了@strSQL以真正执行的SQL代码
if @strWhere != ''
set @strSQL='select * from
(select top 100 percent Row_Number() over('+ @strOrder + ') as num,'+@strGetFields+ ' from '+ @tblName + ' where ' + @strWhere + ' )as tb_temp
where tb_temp.num between ' + str(((@PageIndex-1)*@PageSize)+1) + ' and ' + str(@PageIndex*@PageSize) + ' ' + @strOrder
else
set @strSQL='select * from
(select top 100 percent Row_Number() over('+ @strOrder + ') as num,'+@strGetFields+ ' from '+ @tblName + ' )as tb_temp
where tb_temp.num between ' + str(((@PageIndex-1)*@PageSize)+1) + ' and ' + str(@PageIndex*@PageSize) + ' ' + @strOrder
end
end
exec (@strsql)

Repeater控件的分页效果的更多相关文章

  1. Repeater控件的分页实现

    本文讲解Repeater控件与PagedDataSource相结合实现其分页功能.PagedDataSource 类封装那些允许数据源控件(如 DataGrid.GridView)执行分页操作的属性. ...

  2. repeater控件实现分页

    repeater控件实现排序的方法,今天我再向大家介绍repeater控件如何实现分页的效果. 分页分为真分页和假分页. 真分页:控件上一页需要显示多少数据,就从数据库取出并绑定多少数据,每次换页时都 ...

  3. ASP.NET Repeater控件实现简单分页

    早上,有看MSDN,看到了 PagedDataSource 类 http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.pa ...

  4. 使用Repeater控件实现三层嵌套以及分页效果

    PS: 第一次用Repeater控件 记录一下 请忽略我的命名不规范  请忽略我的最终效果图(太丑了) 需要用到的朋友可以自行调整的漂亮点 ====================最终效果图===== ...

  5. SqlServer分页存储过程(多表查询,多条件排序),Repeater控件呈现数据以及分页

        存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出 ...

  6. Repeater控件使用(含删除,分页功能)

    Repeater控件使用(含删除,分页功能) 摘自:http://www.cnblogs.com/alanliu/archive/2008/02/25/914779.html 前臺代碼 <%@ ...

  7. (转) .NET实现Repeater控件+AspNetPager控件分页

    SqlConnection (.NET C#) 连接及分页 .net的访问数据机制决定了访问大量数据时会致使客户端机器消耗大量资源,因此有必要对数据进行分页显示,开发工具vs.net+sqlserve ...

  8. repeater控件自定义Url分页带参数

    repeater控件的效果图如下: 该页面实现的功能如下: 1.上下分页,(也可以带首页和末页,我只是禁掉了没用) 2.根据用户输入的指定分页索引进行跳转 3.根据筛选数据的参数进行URL分页的参数传 ...

  9. asp.net动态网站repeater控件使用及分页操作介绍

    asp.net动态网站repeater控件使用及分页操作介绍 1.简单介绍 Repeater 控件是一个容器控件,可用于从网页的任何可用数据中创建自定义列表.Repeater 控件没有自己内置的呈现功 ...

随机推荐

  1. windows多线程框架

    #include <iostream> #include <windows.h> using namespace std; HANDLE hMutex; //public : ...

  2. Fragment 笔记

    1.getActivity()  为null问题 在Fragment基类里设置一个Activity mActivity的全局变量,在onAttach(Activity activity)里赋值,使用m ...

  3. js setTimeout 与 setInterval 以及 for 循环 刷新UI

    1. setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式:执行一次: 如果需要执行多次,自身再次调用 setTimeout(): 示例:无穷循环并带停止按钮的 <html&g ...

  4. 十问 Linux 虚拟内存管理 (glibc) (二)

    版权声明:本文由陈福荣原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/184 来源:腾云阁 https://www.qclo ...

  5. 制作Aspose CHM文档的过程记录

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  6. 通配符+countif()解决大于15位数的计数问题

    excel的最大精度是15位,如果一个单元格中存储的数字超过15位,那么函数在计算的时候将会出现问题,它们会将15位之后的数字变成0. 在这种情况下,需要在函数中加入通配符,例如,统计A列中,A1出现 ...

  7. Feistel密码结构

    分组密码:是一种加解密方案,将输入的明文分组当作一个整体出来,输出一个等长的密文分组. 典型的分组大小为64位和128位.密钥长度一般为128位.迭代轮数典型值为16轮. Feistel 密码结构是用 ...

  8. STL中vector的用法

    vector是标准模板库的一种容器,是可存放各种类型的动态数组. #include<iostream> #include<vector> using namespace std ...

  9. 张艾迪(创始人):世界级天才女孩Eidyzhang

    让整个世界与我们一同解读世界第一天才:Eidyzhang 她改变了整个世界.她的故事也激励了整个世界的不论亚洲.欧洲.非洲.南美州.北美洲.南极洲 天才Eidyzhang的故事激励了整个世界不论黑人. ...

  10. override和overload的区别

    override(重写,覆盖) 1.方法名.参数.返回值相同. 2.子类方法不能缩小父类方法的访问权限. 3.子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常). 4.存在于父类和子类之 ...