(1)先建立表,看看表结构

(2)建立存储过程

DataTables是服务器分页,GetWxUsers存储过程使用了4个参数

(1) @start--表示当前第几页,例如第3页,start是从0开始

(2)@limit-页面大小,例如每页10条记录,则limit为10

(3)@key 是查询关键字,

(4)deptid 是额外自定义参数

在SQL里 where下的查询语句是: @key is null or username+displayname+deptname+pinyin like '%'+@key+'%

这里表示:如果未输入关键字则返回所有数据,如果有关键字,则匹配查询 username,displayname,deptname,pinyin

系统把返回的SQL数据存放到一个 #temp 临时表里,

/****** Object:  StoredProcedure [dbo].[GetWxUsers]    Script Date: 03/15/2018 08:19:39 ******/
SET ANSI_NULLS ON
GO SET QUOTED_IDENTIFIER ON
GO CREATE procedure [dbo].[GetWxUsers]
(
@key nvarchar(200)=null,
@deptid int=null,
@start int =null,
@limit int =null
) as
begin
select IDENTITY(int,1,1) as ID, Username, Displayname, Deptname as Title, Deptid, Email, Pinyin
into #temp
from wx_users where (@key is null or username+displayname+deptname+pinyin like '%'+@key+'%') and (@deptid is null or deptid=@deptid) declare @to as int = @start+@limit select Username, Displayname, Title, Deptid, Email, Pinyin from #temp where ID>@start and ID<=@to order by username asc select count(*) from #temp end GO

在DataTables的demo里,可以看到要求的JSON数据源格式,其中draw是预留给开发者自己使用的,服务器会原样返回。recordsTotal为共计记录数,recordsFiltered为过滤后记录数,两个数字通常一样

因此,在上面存储过程中,也是返回2个结果 select   Username, Displayname ... from #temp where ID>@start and ID<=@to   order by username asc 返回数据,

而 select count(*) from #temp 返回记录总数

(3)建立json_users.aspx 返回JSON数据

这是一个常规的执行SQL存储过程,返回数据集的过程,不再详细介绍

using Newtonsoft.Json;
using System.Collections.Generic;
protected void Page_Load(object sender, EventArgs e)
{ string draw = Request["draw"] + "";
string key = Server.UrlDecode(Request["key"]+"");
string start = Request["start"];
string limit = Request["limit"];
string deptid = Request["deptid"]+""; SqlParameter sp_key = new SqlParameter("@key",SqlDbType.NVarChar,);
if (key == "")
{
sp_key.Value = DBNull.Value;
}
else
{
sp_key.Value = key;
} SqlParameter sp_start = new SqlParameter("@start",start);
SqlParameter sp_limit = new SqlParameter("@limit",limit); SqlParameter sp_deptid = new SqlParameter("@deptid", SqlDbType.NVarChar,);
if (deptid == "")
{
sp_deptid.Value = DBNull.Value;
}
else
{
sp_deptid.Value = deptid;
} SqlParameter[] p={ sp_key,sp_start,sp_limit,sp_deptid }; SqlCommand cmd = new SqlCommand();
cmd.CommandText = "GetWxUsers";
cmd.Parameters.AddRange(p);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = new SqlConnection(Helper.GetCon()); DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
da.Fill(ds); dynamic newtonresult = new
{
draw = Convert.ToInt32(draw == "" ? "" : draw),
recordsTotal = ds.Tables[].Rows[][],
recordsFiltered = ds.Tables[].Rows[][],
data = ds.Tables[]
}; string jsonString = JsonConvert.SerializeObject(newtonresult);
System.IO.File.WriteAllText(Server.MapPath("a.txt"), jsonString);
Response.Clear();
Response.ContentType = "application/json";
Response.Write(jsonString); }

在上面代码里,使用了 .net4.5.1版的Newtonsoft.Json.dll,其他版本可以到官网下载。使用Newtonsoft,可以直接把DataTables数据转换为JSON格式

手动输入 json_usres.aspx并传递start和limit参数,则可以看到服务器返回的JSON数据:

(4)下面是Datatables的html页面

        <table   class="table table-hover" style="border-top:solid 1px #eee; " id="tbl_users"  >
<thead>
<tr>
<th>登录名</th>
<th>姓名</th>
<th>邮件</th>
<th>职务</th> </tr>
</thead>
</table>

下面是JS代码,详细要点都在注释里  processing: true 和   serverSide: true ,这个DEMO并没支持排序功能。DATATABLES使用类似的URL进行请求

http://localhost:50465//json_users.aspx?draw=1&start=0&limit=10&columns[0][data]=Name&columns[0][name]=&columns[0][searchable]=true&columns[0][orderable]=true&columns[0][search][value]=&columns[0][search][regex]=false&columns[1][data]=Age&columns[1][name]=&columns[1][searchable]=true&columns[1][orderable]=false&columns[1][search][value]=&columns[1][search][regex]=false&_=1437225574923 详见  https://www.codeproject.com/Tips/1011531/Using-jQuery-DataTables-with-Server-Side-Processin

     function InitTable()
{ var table = $('#tbl_users').DataTable();
//判断table是否是DataTable,因为下面会重建DataTable,所以,如果是,需要先先销毁
if ($.fn.dataTable.isDataTable('#tbl_users')) {
table.destroy();
} //自定义文本框,绑定事件
$("#txt_key").keyup(function () {
$("#txt_deptid").val('');
table.ajax.reload();
});

//当选中行变色,这个是自定义的,不过在绑定前,先解绑
$('#tbl_users').unbind();
$('#tbl_users').on('click', 'tr', function () { $(this).toggleClass('selected');
}); //提示信息
var lang = {
"sProcessing": "处理中...",
"sLengthMenu": "每页 _MENU_ 项",
"sZeroRecords": "没有匹配结果",
"sInfo": "当前显示第 _START_ 至 _END_ 项,共 _TOTAL_ 项。",
"sInfoEmpty": "当前显示第 0 至 0 项,共 0 项",
"sInfoFiltered": "(由 _MAX_ 项结果过滤)",
"sInfoPostFix": "",
"sSearch": "搜索:",
"sUrl": "",
"sEmptyTable": "表中数据为空",
"sLoadingRecords": "载入中...",
"sInfoThousands": ",",
"oPaginate": {
"sFirst": "首页",
"sPrevious": "上页",
"sNext": "下页",
"sLast": "末页",
"sJump": "跳转"
},
"oAria": {
"sSortAscending": ": 以升序排列此列",
"sSortDescending": ": 以降序排列此列"
}
}; //初始化表格
table = $("#tbl_users").dataTable({
language: lang, //提示信息
autoWidth: false, //禁用自动调整列宽
processing: true, //隐藏加载提示,自行处理
serverSide: true, //启用服务器端分页
searching: false, //禁用原生搜索
orderMulti: false, //启用多列排序
"ordering": false,//禁止排序
order: [], //取消默认排序查询,否则复选框一列会出现小箭头
// renderer: "bootstrap", //渲染样式:Bootstrap和jquery-ui
dom: 'frtip',//lfrtip
pagingType: "simple_numbers", //分页样式:simple,simple_numbers,full,full_numbers
columnDefs: [{
"targets": 'nosort', //列的样式名
"orderable": false //包含上样式名‘nosort’的禁止排序
}],
ajax: function (data, callback, settings) {
$.ajax({
type: "GET",
url: "json_users.aspx",
cache: false, //禁用缓存
data: { key: escape($("#txt_key").val()), deptid: $("#txt_deptid").val(), start: data.start, limit: data.length }, //传入组装的参数
dataType: "json",
success: function (result) {
callback(result);//调用DataTable的callback返回数据
//在DataTables的官方演示里,返回的JSON是不含列名的,而在Json_users.aspx里使用Newtonsoft.Json是返回列名的,所以后面调用了api()函数
}
});
},
//列表表头字段
columns: [
{ "data": "Username" },
{ "data": "Displayname" },
{ "data": "Email" },
{ "data": "Title" } ]
}).api();
//此处需调用api()方法,否则返回的是JQuery对象而不是DataTables的API对象 }

下面是效果

使用ASP.NET+Jquery DataTables的服务器分页的更多相关文章

  1. [jQuery]jQuery DataTables插件自定义Ajax分页实现

    前言 昨天在博客园的博问上帮一位园友解决了一个问题,我觉得有必要记录一下,万一有人也遇上了呢. 问题描述 园友是做前端的,产品经理要求他使用jQuery DataTables插件显示一个列表,要实现分 ...

  2. ASP.NET MVC+EF在服务端分页使用jqGrid以及jquery Datatables的注意事项

    引言: 本人想自己个博客网站出来,技术路线是用ASN.NET MVC5+EF6(Code First)+ZUI+各种Jquery插件,有了这个想法之后就开始选择UI,看了好多bootstrap的模板之 ...

  3. Jquery.Datatables 服务器处理(Server-side processing)

    看了看介绍 http://datatables.club/manual/server-side.html 没有经过处理的分页,先显示出来看看效果,就这样写(存储过程自己写) cshtml " ...

  4. jQuery DataTables 分页

    HTML:================================================================== <div class="ibox-con ...

  5. jQuery DataTables and ASP.NET MVC Integration

    part 1 : http://www.codeproject.com/Articles/155422/jQuery-DataTables-and-ASP-NET-MVC-Integration-Pa ...

  6. jQuery DataTables插件分页允许输入页码跳转

    背景说明 项目中使用jQuery DataTables插件来实现分页表格,但是默认的分页样式不能输入页码进行跳转,在页数非常多的时候使用很不方便,最主要的还是没有达到产品部门的设计要求,所以我需要寻找 ...

  7. jquery.dataTables的探索之路-服务端分页配置

    最近闲来无事想研究下数据表格,因为之前接触过layui和bootstrap的数据表格,本着能学多少学多少的学习态度,学习下dataTables的服务端分页配置.特与同学们一块分享下从中遇到的问题和解决 ...

  8. jquery DataTables表格插件的使用(网页数据表格化及分页显示)

    DataTables - 非常强大的 jQuery 表格插件,可变宽页码浏览,现场过滤. 多列排序,自动探测数据类型,智能列宽,可从几乎任何数据源获取数据. 那么在Bootstrap下如何使用Data ...

  9. jquery dataTables.min.js API

    demo: http://datatables.net/release-datatables/examples/api/select_single_row.html 选择一行http://datata ...

随机推荐

  1. 2018年湘潭大学程序设计竞赛 F - maze

    把点抽出来 跑个最短路就好啦. #include<bits/stdc++.h> #define LL long long #define pii pair<int,int> # ...

  2. Stable Match

    稳定婚姻问题 主要就是处理两个数组 boy[i][j]    存放第i个男的第j喜欢的女的   存的是女的编号!! girl[i][j]   存放 第i个女的对第j个男的的好感度  存的是值 然后只要 ...

  3. pymysql模块 执行sql封装

    封装pymysql模块执行sql class HandCost(object): """ 处理数据库中的数据 """ def __init_ ...

  4. 初识thinkphp(4)

    这次内容是数据库的使用方法 因为在第一章讲过就是拿index这个文件写的数据库的访问,这次实验我使用文件是系统默认的首页 配置的内容也在那里有提过就不重发戳图了. 数据库按照手册上的建议建了3行的内容 ...

  5. zoj 3204 最小生成树,输出字典序最小的解

    注意排序即可 #include<cstdio> #include<iostream> #include<algorithm> #include<cstring ...

  6. oracle创建透明网关出现的问题

    解决方案:创建HS_TRANSACTION_LOG表 DROP TABLE HS_TRANSACTION_LOG go CREATE TABLE HS_TRANSACTION_LOG( GLOBAL_ ...

  7. Handlebars.js 预编译(转)

    Handlebars.js 官网上对预编译1是这样说的: 你需要安装 Node.js 你需要在全局环境中,通过 Npm 安装 handlebars 包 然后你就可以通过命令预编译你的 handleba ...

  8. STM32F4 SPI with DMA

    STM32F4 SPI with DMA A few people have requested code, so I thought I’d post the code showing how I’ ...

  9. msgpack的数据序列和还原

    msgpack的数据序列和还原 msgpack不仅可以序列一些常规的数据类型的数据,比如:string.datetime.integer...... 还能序列olevariant.stream 这就非 ...

  10. Blocks Programming Topics

    最近的工作中比较频繁的用到了Block,不在是以前当做函数指针的替代或者某些API只有Blocks形式的接口才不得已用之了,发现自己对其了解还是太浅,特别是变量的生存期,按惯例还是翻译官方文档,原文链 ...