几种不同的分页处理办法

--------------------------------------第一种:利用动软代码生成器生成的分页------------------------------------
//新建一个一般处理程序
pageIndex = int.Parse(HttpContext.Current.Request.Params["page"]);//获取到页数
pageSize = int.Parse(HttpContext.Current.Request.Params["rows"]);//获取每页的大小

total = bll.GetRecordCount(" " );//获取总数

DataSet ds = bll.GetListByPage(" ", "ID", (pageIndex - 1) * pageSize + 1, pageSize * pageIndex);//GetRecordCount,GetListByPage都是生成器生成
list = bll.DataTableToList(ds.Tables[0]);//DataTableToList
var data = new { total = total, rows = list };//EasyUI中的datagrid返回json数据的格式
//将data集合构造成Json字符串
HttpContext.Current.Response.Write(Kits.SerializeToJson(data));//SerializeToJson是在公共类的一个办法

----------------------------------第二种:利用LaomaPager生成类插件来分页--------------------------------------------------------------------------
--后台页面
protected List<Model.HKSJ_Main> mainShow = new List<Model.HKSJ_Main>();

//实现分页显示图片数据
protected string NavPager { get; set; }

protected void Page_Load(object sender, EventArgs e)
{
//获取网站Main表中的数据
BLL.HKSJ_Main mainServices = new BLL.HKSJ_Main();

//首先获取分页参数
int pageSize = Request["pageSize"] == null ? 10 : Convert.ToInt32(Request["pageSize"]);
int pageIndex = Request["pageIndex"] == null ? 1 : Convert.ToInt32(Request["pageIndex"]);

//获取到totalCount的数据
int totalCount = mainServices.GetRecordCount(string.Empty);

//计算在页面上面显示的分页的数量
DataSet ds = mainServices.GetListByPage(string.Empty, "ID", pageSize * (pageIndex - 1) + 1, pageIndex * pageSize);
//内容数据显示
mainShow = mainServices.DataTableToList(ds.Tables[0]);
//分页数据显示,LaomaPager是封装类插件
NavPager = Common.LaomaPager.ShowPageNavigate(pageSize, pageIndex, totalCount);
}

注释说明:GetListByPage是生成器里面就可以直接用的,LaomaPager是封装类插件(找一个就好)

--前台页面
<div class="pages"><%=NavPager %></div>

--前台页面表格数据
<asp:Content ID="Content2" ContentPlaceHolderID="Content" runat="server">
<table style="width: 100%">
<tr>
<th>ID</th>
<th>title</th>
<th>content</th>
<th>people</th>
<th>date</th>
<th>status</th>
<th>MainPeople</th>
</tr>

<%foreach (var empoyees in Empoyees)
{%>
<tr>
<td><%=empoyees.ID %></td>
<td><%=empoyees.title %></td>
<td><%=empoyees.content %></td>
<td><%=empoyees.people %></td>
<td><%=empoyees.date %></td>
<td><%=empoyees.status %></td>
<td><%=empoyees.MainPeople %></td>
</tr>
<%} %>
</table>

</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="NavPage" runat="server">
<%=NavPager %>
</asp:Content>

--------------------------------------第三种:利用存储过程分页--------------------------------------------------
//新建一个一般处理程序
//接收表格的分页数据
strPageIndex = context.Request.Params["page"];
strPageSize = context.Request.Params["rows"];

PagedData pageData = new PagedData() { PageIndex = int.Parse(strPageIndex), PageSize = int.Parse(strPageSize) };//PagedData 是一个公共类,如下面

//调用存储过程来查询数据 并使用out 修改输出参数的值
var workFlowList = workFlowBll.GetPageDataByProcedure(int.Parse(strPageIndex), int.Parse(strPageSize), "IsDel=‘false‘", out rowCount);

//List<NanFang_WorkFlowNode> workFlowNodeList = workFlowNodeBll.GetModelList(" IsDel=‘false‘");

//将必要的数据赋值给EasyUI需要的变量
pageData.rows = workFlowList;
pageData.total = rowCount;

string str=Kits.SerializeToJson(pageData);
context.Response.Write(str);

//PagedData公共类
public class PagedData
{
public int PageIndex;
public int PageSize;
public int total;// RowCount; 是为 EasyUI的datagrid组件 而改
public object rows;//PagedList; 是为 EasyUI的datagrid组件 而改

public int PageCount
{
get
{
return (int)Math.Ceiling(Convert.ToDouble(total) / Convert.ToDouble(PageSize));
}
}
}
//在BLL层添加
public List<NanFang.Model.NanFang_WorkFlow> GetPageDataByProcedure(int pageIndex, int pageSize, string strWhere, out int rowsCount)
{
DataSet ds = dal.GetPageDataByProcedure(pageIndex, pageSize, strWhere, out rowsCount);
return DataTableToList(ds.Tables[0]);
}
//在IDAL层添加
DataSet GetPageDataByProcedure(int PageIndex, int PageSize, string strWhere, out int rowsCount);
//在DAL层添加
public DataSet GetPageDataByProcedure(int PageIndex, int PageSize, string strWhere, out int rowsCount)
{
SqlParameter[] parameters = {
new SqlParameter("@pageIndex", SqlDbType.Int),
new SqlParameter("@pageSize", SqlDbType.Int),
new SqlParameter("@strWhere", SqlDbType.NVarChar,200),
new SqlParameter("@rowCount", SqlDbType.Int)
};
parameters[0].Value = PageIndex;
parameters[1].Value = PageSize;
parameters[2].Value = strWhere;
parameters[3].Direction = ParameterDirection.Output;

return DbHelperSQL.RunProcedure("usp_GetWorkFlowPage", parameters, out rowsCount);//RunProcedure办法是代码生成器自带的
}
//在数据库中写的存储过程

USE [NanFang_Hospital]
GO
/****** Object: StoredProcedure [dbo].[usp_GetWorkFlowPage] Script Date: 04/02/2014 11:13:25 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[usp_GetWorkFlowPage]
@pageIndex int,--查询的起始页
@pageSize int,--每页多少条数据
@strWhere nvarchar(200),--查询workFlow表的条件
@rowCount int output --输出函数
AS
BEGIN
declare @startNum nvarchar(10),--当前页开始的索引
@endNum nvarchar(10),--当前页结束索引
@sqlCount nvarchar(300),--查询数据的总行数
@sqlSelect nvarchar(300)
set @startNum=cast((@pageIndex-1)*@pageSize as nvarchar(10))--计算当前页开始的索引
set @endNum=cast(@pageIndex*@pageSize as nvarchar(10))--计算当前页结束的索引
--判断是否有条件的查询
if(LEN(@strWhere)>1)
--有条件的查询就执行下面语句
begin
set @sqlCount=N‘select @rowCount=count(ID) from dbo.NanFang_WorkFlow where ‘[email protected]
set @sqlSelect=‘select k.* from (select ROW_NUMBER() over(order by ID) AS num,* FROM dbo.NanFang_WorkFlow where ‘[email protected]+‘) as k where k.num>‘[email protected]+‘ and k.num<=‘[email protected]+‘ order by k.AddTime asc ‘
end

else
begin
set @sqlCount=N‘select @rowCount=count(ID) from dbo.NanFang_WorkFlow ‘
set @sqlSelect=‘select k.* from (select ROW_NUMBER() over(order by ID) AS num,* FROM dbo.NanFang_WorkFlow ) as k where k.num>‘[email protected]+‘ and k.num<=‘[email protected]+‘ order by k.AddTime asc ‘
end

--查询总行数:执行系统内置的存储过程
exec sp_executesql @sqlCount,N‘@rowCount int output‘,@rowCount output

exec sp_executesql @sqlSelect
END

几种不同的分页处理办法

时间: 2024-11-05 21:45:48

几种不同的分页处理办法的相关文章

MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法

在这里主要讲解一下MySQL.SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法. 可能会有人说这些网上都有,但我的主要目的是把这些知识通过我实际的应用总结归纳一下,以方便大家查询使用. 下面就分别给大家介绍.讲解一下三种数据库实现分页查询的方法. 一. MySQL 数据库分页查询 MySQL数据库实现分页比较简单,提供了LIMIT函数.一般只需要直接写到sql语句后面就行了. LIMIT子句可以用来限制由SELECT语句返回过来的数据数量,它有

谈一谈几种处理 JavaScript 异步操作的办法

本文标签:   JavaScript 原生JavaScript优势 JavaScript异步 js的异步操作 回调函数 TensorFlow REST   服务器 引言 js的异步操作,已经是一个老生常谈的话题,关于这个话题的文章随便google一下都可以看到一大堆.那么为什么我还要写这篇东西呢?在最近的工作中,为了编写一套相对比较复杂的插件,需要处理各种各样的异步操作.但是为了体积和兼容性,不打算引入任何的pollyfill,甚至连babel也不允许使用,这也意味着只能以es5的方式去处理.使

几种常见SQL分页方式效率比较-转

原文地址:几种常见SQL分页方式效率比较 分页很重要,面试会遇到.不妨再回顾总结一下. 1.创建测试环境,(插入100万条数据大概耗时5分钟). create database DBTestuse DBTest --创建测试表create table pagetest(id int identity(1,1) not null,col01 int null,col02 nvarchar(50) null,col03 datetime null) --1万记录集declare @i intset

几种常见SQL分页方式效率比较

1.创建测试环境,(插入100万条数据大概耗时5分钟). create database DBTestuse DBTest --创建测试表create table pagetest(id int identity(1,1) not null,col01 int null,col02 nvarchar(50) null,col03 datetime null) --1万记录集declare @i intset @i=0while(@i<10000)begin insert into pagetes

盘点几种数据库的分页SQL的写法(转)

Data序列——盘点几种数据库的分页SQL的写法http://www.cnblogs.com/fireasy/archive/2013/04/10/3013088.html

Android项目实战(十二):解决OOM的一种偷懒又有效的办法

原文:Android项目实战(十二):解决OOM的一种偷懒又有效的办法 在程序的manifest文件的application节点加入android:largeHeap=“true” 即可. 对,只需要一句话! 那么这行代码的意思是什么呢? 简单的说就是使该APP获取最大可分配的内存,以便解决OOM问题. 但是.OOM问题出现的原因总得来说有两点: 1.某个手机的内存真的很少 2.代码问题,比如没有处理好Bitmap图片的大小 可以说,出现OOM的情况基本都是第二种情况,那么就需要修改代码,看看哪

oracle,mysql,SqlServer三种数据库的分页查询总结

MySql: MySQL数据库实现分页比较简单,提供了 LIMIT函数.一般只需要直接写到sql语句后面就行了. LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数,如果给出两个参数, 第一个参数指定返回的第一行在所有数据中的位置,从0开始(注意不是1),第二个参数指定最多返回行数.例如: select * from table    LIMIT 10;    #返回前10行 select * from table    LIMIT 0,10; #返回前10行

3种SQL语句分页写法

在开发中经常会使用到数据分页查询,一般的分页可以直接用SQL语句分页,当然也可以把分页写在存储过程里,下面是三种比较常用的SQL语句分页方法,下面以每页5条数据,查询第3页为例子: 第一种:使用not in,select top 方法: select top 5 * from T_user where ID not in(select top (3-1)*5 id from T_user order by ID) 说明:select top 页大小 [要查询的字段名称] from 表名 wher

换种方式去分页(转)

为什么要换种方式分页,一个字:太慢了 分页要传入的参数,1:页号,2:行数 分页要取到的数据, 1:总行数,2:单页数据 本文的方式应该有不少老手在使用了,欢迎吐糟.拍砖! http://www.cnblogs.com/mikedeng/p/better_pagination.html