Jquery+Ajax+Json+存储过程实现高效分页
作者:mrr 发布时间:2022-04-25 02:22:30
标签:jquery,ajax,son,存储过程,分页
之前在做分页时,很多朋友都是用Jquery分页插件,之前我就用的jquery.paper,有需要的朋友可以联系我,接下来小编给大家分享用Jquery+Ajax+Json+存储过程实现高效分页。
实现此功能用分页存储过程,pagination,js样式,废话不多了,具体请看下面代码
分页存储过程:PAGINATION
CREATE PROCEDURE [dbo].[PAGINATION]
@FEILDS VARCHAR(),--要显示的字段
@PAGE_INDEX INT,--当前页码
@PAGE_SIZE INT,--页面大小
@ORDERTYPE BIT,--当为时 则为 desc 当为 时 asc
@ANDWHERE VARCHAR()='',--where语句 不用加where
@ORDERFEILD VARCHAR(), --排序的字段
@TABLENAME VARCHAR() --查询的表明
as
DECLARE @EXECSQL VARCHAR()
DECLARE @ORDERSTR VARCHAR()
DECLARE @ORDERBY VARCHAR()
BEGIN
set NOCOUNT on
IF @ORDERTYPE =
BEGIN
SET @ORDERSTR = ' > ( SELECT MAX(['+@ORDERFEILD+'])'
SET @ORDERBY = 'ORDER BY '+@ORDERFEILD+' ASC'
END
ELSE
BEGIN
SET @ORDERSTR = ' < ( SELECT MIN(['+@ORDERFEILD+'])'
SET @ORDERBY = 'ORDER BY '+@ORDERFEILD+' DESC'
END
IF @PAGE_INDEX = --当页码是第一页时直接运行,提高速度
BEGIN
IF @ANDWHERE=''
SET @EXECSQL = 'SELECT TOP '+STR(@PAGE_SIZE)+' '+@FEILDS+' FROM '+@TABLENAME+' '+@ORDERBY
ELSE
SET @EXECSQL = 'SELECT TOP '+STR(@PAGE_SIZE)+' '+@FEILDS+' FROM '+@TABLENAME+' WHERE '+@ANDWHERE+' '+ @ORDERBY
END
ELSE
BEGIN
IF @ANDWHERE=''
BEGIN --以子查询结果当做新表时 要给表名别名才能用
SET @EXECSQL = 'SELECT TOP'+STR(@PAGE_SIZE)+' '+@FEILDS+' FROM '+@TABLENAME+' WHERE '+@ORDERFEILD+
@ORDERSTR+' FROM (SELECT TOP '+STR(@PAGE_SIZE*(@PAGE_INDEX-))+' '+@ORDERFEILD+
' FROM '+@TABLENAME+' '+@ORDERBY+') AS TEMP) '+ @ORDERBY
END
ELSE
BEGIN
SET @EXECSQL = 'SELECT TOP'+STR(@PAGE_SIZE)+' '+@FEILDS+' FROM '+@TABLENAME+' WHERE '+@ORDERFEILD+
@ORDERSTR+' FROM (SELECT TOP '+ STR(@PAGE_SIZE*(@PAGE_INDEX-))+' '+@ORDERFEILD+
' FROM '+@TABLENAME+' WHERE '+@ANDWHERE+' '+@ORDERBY+') AS TEMP) AND '+@ANDWHERE+' '+ @ORDERBY
END
END
EXEC (@EXECSQL)--这里要加括号
END
分页样式:
<style type="text/css">
a,area { -moz-outline-style: none; blr:expression(this.onFocus=this.blur()); text-decoration:none}
div.badoo { padding:px; text-align:center; }
div.badoo a { border:px solid #ededed; padding:px px; color:#; border-radius:px; margin-right:px;}
div.badoo a:hover {border:px solid #ffa; color: #ffa; }
div.badoo a:active {border:px solid #ffa; margin-right:px;}
div.badoo span { border:px solid #EDEDED; padding:px px; color:#f;font-weight:bold; background:#FAFAFA; border-radius:px; margin-right:px;}
div.badoo span.disabled { border:px solid #EDEDED; padding:px px; color:#; margin-right:px; font-weight:;}
</style>
首先创建一般处理程序,读取数据库中内容,得到返回值.
创建文件,GetData.ashx.
我这里是用的存储过程,存储过程会再下面粘出来,至于数据只是实例,你们可根据需求自行读取数据
using System;
using System.Web;
using System.Data.SqlClient;
using System.Data;
using System.Collections.Generic;
using System.Web.Script.Serialization;
using Model;
context.Response.ContentType = "text/plain";
var pageIndex = context.Request["PageIndex"];
//判断当前索引存不存在,如果不存在则获取记录的总数。
if (string.IsNullOrEmpty(pageIndex))
{
//获取查询记录总数的sql语句
int count = ;
int.TryParse(new BLL.t_profit().SelectAllNum(), out count);
context.Response.Write(count);
context.Response.End();
}
//当根据索引获取数据
else
{
int currentPageIndex = ;
int.TryParse(pageIndex, out currentPageIndex);
SqlParameter[] parms = new SqlParameter[] {
new SqlParameter("@FEILDS",SqlDbType.NVarChar,),
new SqlParameter("@PAGE_INDEX",SqlDbType.Int,),
new SqlParameter("@PAGE_SIZE",SqlDbType.Int,),
new SqlParameter("@ORDERTYPE",SqlDbType.Int,),
new SqlParameter("@ANDWHERE",SqlDbType.VarChar,),
new SqlParameter("@ORDERFEILD",SqlDbType.VarChar,)
};
parms[].Value = "id,name,sex,tel";//获取所有的字段
parms[].Value = pageIndex;//当前页面索引
parms[].Value = ;//页面大小
parms[].Value = ;//升序排列
parms[].Value = "";//条件语句
parms[].Value = "id";//排序字段
List<Book> list = new List<Book>();
using (SqlDataReader sdr = Yoodor.DAL.SqlHelper.ExecuteReader(CommandType.StoredProcedure, "PAGINATION", parms))
{
while (sdr.Read())
{
list.Add(new Book { id = sdr[].ToString(), name = sdr[].ToString(), sex = sdr[].ToString(), tel = sdr[].ToString() });
}
}
context.Response.Write(new JavaScriptSerializer().Serialize(list).ToString());//转为Json格式
}
public string id { get; set; }
public string name { get; set; }
public string sex { get; set; }
public string tel { get; set; }
样式代码:
<style type="text/css">
a,area { -moz-outline-style: none; blr:expression(this.onFocus=this.blur()); text-decoration:none}
div.badoo { padding:px; text-align:center; }
div.badoo a { border:px solid #ededed; padding:px px; color:#; border-radius:px; margin-right:px;}
div.badoo a:hover {border:px solid #ffa; color: #ffa; }
div.badoo a:active {border:px solid #ffa; margin-right:px;}
div.badoo span { border:px solid #EDEDED; padding:px px; color:#f;font-weight:bold; background:#FAFAFA; border-radius:px; margin-right:px;}
div.badoo span.disabled { border:px solid #EDEDED; padding:px px; color:#; margin-right:px; font-weight:;}
</style>
js代码
<script type="text/javascript">
$(function () {
$.post("GetData.ashx", null, function (data) {
var total = data;
PageClick(, total, );
});
PageClick = function (pageIndex, total, spanInterval) {
$.ajax({
url: "GetData.ashx",
data: { "PageIndex": pageIndex },
type: "post",
dataType: "json",
success: function (data) {
//索引从开始
//将当前页索引转为int类型
var intPageIndex = parseInt(pageIndex);
//获取显示数据的表格
var table = $("#content");
//清楚表格中内容
$("#content tr").remove();
//向表格中添加内容
for (var i = ; i < data.length; i++) {
table.append(
$("<tr><td>" +
data[i].id
+ "</td><td>" +
data[i].name
+ "</td><td>" +
data[i].sex
+ "</td><td>" +
data[i].tel
+ "</td></tr>")
);
} //for
//创建分页
//将总记录数结果 得到 总页码数
var pageS = total
if (pageS % == ) pageS = pageS / ;
else pageS = parseInt(total / ) + ;
var $pager = $("#pager");
//清楚分页div中的内容
$("#pager span").remove();
$("#pager a").remove();
//添加第一页
if (intPageIndex == ) {
// $pager.append("<span class='disabled'>第一页</span>");
}
else {
// var first = $("<a href='javascript:void()' first='" + + "'>第一页</a>").click(function () {
// PageClick($(this).attr('first'), total, spanInterval);
// return false;
// });
// $pager.append(first);
}
//添加上一页
if (intPageIndex == )
$pager.append("<span class='disabled'>上一页</span>");
else {
var pre = $("<a href='javascript:void()' pre='" + (intPageIndex - ) + "'>上一页</a>").click(function () {
PageClick($(this).attr('pre'), total, spanInterval);
return false;
});
$pager.append(pre);
}
//设置分页的格式 这里可以根据需求完成自己想要的结果
var interval = parseInt(spanInterval); //设置间隔
var start = Math.max(, intPageIndex - interval); //设置起始页
var end = Math.min(intPageIndex + interval, pageS)//设置末页
if (intPageIndex < interval + ) {
end = ( * interval + ) > pageS ? pageS : ( * interval + );
}
if ((intPageIndex + interval) > pageS) {
start = (pageS - * interval) < ? : (pageS - * interval);
}
//生成页码
for (var j = start; j < end + ; j++) {
if (j == intPageIndex) {
var spanSelectd = $("<span class='current'>" + j + "</span>");
$pager.append(spanSelectd);
} //if
else {
var a = $("<a href='javascript:void()'>" + j + "</a>").click(function () {
PageClick($(this).text(), total, spanInterval);
return false;
});
$pager.append(a);
} //else
} //for
//上一页
if (intPageIndex == Math.ceil(total / )) {
$pager.append("<span class='disabled'>下一页</span>");
}
else {
var next = $("<a href='javascript:void()' next='" + (intPageIndex + ) + "'>下一页</a>").click(function () {
PageClick($(this).attr("next"), total, spanInterval);
return false;
});
$pager.append(next);
}
//最后一页
if (intPageIndex == pageS) {
// $pager.append("<span class='disabled'>最后一页</span>");
}
else {
// var last = $("<a href='javascript:void()' last='" + pageS + "'>最后一页</a>").click(function () {
// PageClick($(this).attr("last"), total, spanInterval);
// return false;
// });
// $pager.append(last);
}
} //sucess
}); //ajax
}; //function
}); //ready
</script>
<table id="content">
</table>
<div id="pager" class="badoo"></div>
/// <summary>
/// Execute a SqlCommand that returns a resultset against the database specified in the connection string
/// using the provided parameters.
/// </summary>
/// <param name="connectionString">一个有效的数据库连接字符串</param>
/// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
/// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
/// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
/// <returns>A SqlDataReader containing the results</returns>
public static SqlDataReader ExecuteReader( CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
{
SqlCommand cmd = new SqlCommand();
SqlConnection conn = new SqlConnection(connectionString);
// we use a try/catch here because if the method throws an exception we want to
// close the connection throw code, because no datareader will exist, hence the
// commandBehaviour.CloseConnection will not work
try
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return rdr;
}
catch (Exception ex)
{
conn.Close();
throw new Exception(ex.Message);
}
}


猜你喜欢
- 本文实例讲述了C#实现查杀本地与远程进程的方法。分享给大家供大家参考。具体实现方法如下:using System;using System.
- startJVM是加载jvm用的方法。在JPype,apache mod等等很多地方都用到。但凡要用其他语言来加载jvm进程,就要用到这个。
- 我们在构建C# Form窗口的时候经常需要到弹出新的窗口,那么接着就会如何弹出窗口的疑问。这里介绍最常见的两种弹窗方法show()和show
- 为什么需要多线程?模型的简化,如某些程序是由多个相对独立任务的运行:图形界面的出现,输入、输出的阻塞多核CPU的更好利用异步行为的需要Jav
- MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoD
- 本文介绍了如何在Visual Studio中创建用户控件来显示下拉式计算器,弹出效果类似于日历控件。介绍如果我们正在做一个类似于库存控制和计
- 嵌套查询使用Fluent Mybatis, 不用手写一行xml文件或者Mapper文件,在dao类中即可使用java api构造中比较复杂的
- 因为一直用spring整合了mybatis,所以很少用到mybatis的session缓存。 习惯是本地缓存自己用map写或者引入第三方的本
- 一、前言近些年,随着微服务框架在越来越多的公司产品中实践落地,以Spring Cloud Alibaba为导向的一站式微服务解决方案也成为微
- 想必我们在做项目的时候,都会遇到服务端与客户端交互数据。一般情况下我们都会采用json格式或者xml格式,将服务端的数据转换成这两种格式之一
- 该功能本来可以通过拉动水平和垂直滚动条来实现,但实际使用中,用户更趋向于直接用鼠标拖动页面来实现,很多看图类软件都有这种类似的功能。而.ne
- 模板方法-基类封装Activity和Fragment应该是Android最常用的组件,对他进行简单的封装对提高代码的简洁性也有很大的帮助。B
- Pattern类定义 public final class Pattern
- 引言坦白从宽吧,我就是那个花了两天两夜把 1M 图片优化到 100kb 的家伙——王小二!自从因为一
- 本文实例讲述了Java基于Tcp的基础聊天功能。分享给大家供大家参考,具体如下:最基础的聊天,用户端和服务器端每次说一句,而且严格规定了先后
- 1. 原理每一个线程对应一个消息队列MessageQueue,实现线程之间的通信,可通过Handler对象将数据装进Message中,再将消
- 前言在mybatis和mybatis plus里,如果你的实体字段是一个枚举类型,而在数据表里是整型,这时在存储时需要进行处理,默认情况下,
- ArrayList和LinkedList都实现了List接口,有以下的不同点:1、ArrayList是基于索引的数据接口,它的底层是数组。它
- 有的人的电脑在使用 IntelliJ IDEA 的svn 时候,无法保存密码,输入密码时,勾选保存密码还是无效。每次都的输入密码,一次浪费2
- 实现Java多态性的时候,关于方法调用的优先级:我们这样假设下,super(超类)、this(当前类对象)、show(方法)、object(