使用DataTables的服务器分页

(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 ‘%‘[email protected]+‘%

这里表示:如果未输入关键字则返回所有数据,如果有关键字,则匹配查询 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<[email protected]   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,200);
            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,20);
            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 == "" ? "0" : draw),
                recordsTotal = ds.Tables[1].Rows[0][0],
                recordsFiltered = ds.Tables[1].Rows[0][0],
                data = ds.Tables[0]
            };

            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对象

     }
    

下面是效果

原文地址:https://www.cnblogs.com/mqingqing123/p/8571497.html

时间: 2024-11-06 16:36:29

使用DataTables的服务器分页的相关文章

Jquery的DataTable插件 AJAX 服务器分页的的学习心得(java版)

首先得先引入对应的js 1.jquery.min.js  首先导入 2. File:        jquery.dataTables.min.js Version:     1.9.4     这是我使用的版本 这是  jsp 页面 关键的table  代码 <table id="fuck" class="table table-bordered data-table"> <thead> <tr> <span style=

修改DataTables向服务器发送请求参数

function _fnAjaxParameters( settings ) { var columns = settings.aoColumns, columnCount = columns.length, features = settings.oFeatures, i, data = [], dataProp, column, columnSearch, sort = _fnSortFlatten( settings ), start = settings._iDisplayStart+1

用DataTables实现服务器端分页

推荐下,H-ui.admin 模版里面使用了DataTables,而且把常用功能都给实现的很完整了,推荐去参考H-ui的模版源码参考! 分享几篇有价值的文章: DataTables 的官网:https://datatables.net Bootstrap插件DataTables实现服务器端分页http://lovelock.coding.me/javascript/bootstrap-plugin-datatables/ PHP+Ajax+Datatables实现分页https://blog.c

spring下DataTable服务器分页

JSP中body内容: <table class="table table-border table-bordered table-bg table-hover table-sort"> <thead> <tr class="text-c"> <th width="80">ID</th> <th width="100">类型</th> <

bootstrap table 服务器分页

1.封装MODEL using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace MODEL.FormatModel{ public class TableModel<T> { public T rows { get; set; } public int total{get;set;} }} 2.方法 public

datatable1.10服务器断分页

接着上一篇datatable1.10的新特性,出于工作需求,我们需要进行服务器端分页. 本人还是直接拿代码..然后给代码加上注释..如果有疑问可以指点一二... $(document).ready(function() { var table = $('#example').DataTable({ "columns" : _tableCols, "createdRow" : xxxxxx,        //函数名 "processing" :

转 Datatables中文API——基本参数

鉴于自己一直在使用datatables,发现这是个很不错的表格插件,但是好的东西都是英文的,所以我结合自己的使用经验,把官网的英文api做下简单的翻译,同时也希望大家把自己的使用经验一起分享出来,让我们更好的使用datatables,本帖将会持续更新……从基本属性开始吧bAutoWidth :启用或禁用自动列宽度的计算. 默认值 true 类型 boolean $(document).ready( function () { $('#example').dataTable( { "bAutoWi

.Net MVC&amp;&amp;datatables.js&amp;&amp;bootstrap做一个界面的CRUD有多简单

我们在项目开发中,做得最多的可能就是CRUD,那么我们如何在ASP.NET MVC中来做CRUD呢?如果说只是单纯实现功能,那自然是再简单不过了,可是我们要考虑如何来做得比较好维护比较好扩展,如何做得比较漂亮.做开发要有工匠精神,不要只求完成开发任务,那样的话,永远停留在只是简单的写业务逻辑代码水平,我们要做有追求的程序员.本来这么简单的东西,我真是懒得写,但是看到即便是一些工作了好些年的人,做东西也是只管实现功能,啥都不管,还有些界面css样式要么就硬编要么就毫无规则的在页面中进行穿插,遇到要

(原)jq表格插件dataTables的一些总结(一)

jQuery 的插件 dataTables 是一个优秀的表格插件,提供了针对表格的排序.浏览器分页.服务器分页.筛选.格式化等功能.dataTables 的网站上也提供了大量的演示和详细的文档进行说明,官网网站是http://www.datatables.net/,参考的网址还有DataTables中文网http://dt.thxopen.com/.这段时间因为需要用表格在前台显示数据,所以接触到dataTables,上网查资料发现网上的资料都比较老,所以想将自己最近用到的dataTables的