WEB後台開發,如果用的是Bootstrap框架,那這個表格神器你一定不要錯過。
官方地址:https://datatables.net/
What?英文不好,沒關系咱有中文的 http://datatables.club/
不過我還是建議看英文的,因為比較全面雖然訪問的速度慢點,終歸能進的去。閒話不過說,先來個小例子吧。
1.先引用一下腳本地址,最好版本是一致的
<link rel="stylesheet" href="dataTables.bootstrap.min.css"> <script src="jquery.dataTables.min.js"></script> <script src="dataTables.bootstrap.min.js"></script>
2.配置一下本地化
"oLanguage": { "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": ": 以降序排列此列" } },
寫到這裡要說一句,上邊這段本地化配置,有沒有發現它的命名挺奇怪的,前邊都有一個小寫的o、s之類的,但是現在官網並不這樣命名了,當然這並不影響我們使用它,下邊是比較新的配置參數。
language: { "decimal": "", "emptyTable": "No data available in table", "info": "當前顯示第 _START_ 至 _END_ 項,共 _TOTAL_ 項。", "infoEmpty": "當前顯示第 0 至 0 項,共 0 項", "infoFiltered": "(由 _MAX_ 項結果過濾)", "infoPostFix": "", "thousands": ",", "lengthMenu": "每頁 _MENU_ 項", "loadingRecords": "載入中...", "processing": "處理中...", "search": "搜索:", "zeroRecords": "沒有匹配結果", "paginate": { "first": "首頁", "previous": "上頁", "next": "下頁", "last": "末頁" }, "aria": { "sortAscending": ": 以升序排列此列", "sortDescending": ": 以降序排列此列" } }
如果從開發角度來講的話,每次都初始化這個配置,挺麻煩的,所以我們可以封裝成文件,下個頁面引用一下就可以了,接下來創建一個名字為 dataTables.defaults.js 的文件代碼如下
$.extend($.fn.dataTable.defaults, { language: { "decimal": "", "emptyTable": "No data available in table", "info": "當前顯示第 _START_ 至 _END_ 項,共 _TOTAL_ 項。", "infoEmpty": "當前顯示第 0 至 0 項,共 0 項", "infoFiltered": "(由 _MAX_ 項結果過濾)", "infoPostFix": "", "thousands": ",", "lengthMenu": "每頁 _MENU_ 項", "loadingRecords": "載入中...", "processing": "處理中...", "search": "搜索:", "zeroRecords": "沒有匹配結果", "paginate": { "first": "首頁", "previous": "上頁", "next": "下頁", "last": "末頁" }, "aria": { "sortAscending": ": 以升序排列此列", "sortDescending": ": 以降序排列此列" } } });
我現在我們的語言本地化配置就算結束了,如果單獨的文件一定別忘記引用!!
3.下面我們看下別的配置
<table id="table" class="table table-condensed table-hover">
</table>
var table = $("#table").DataTable({ lengthMenu: [[20, 40, 60, -1], [20, 40, 60, "All"]], sort: false, pageLength: 20, pagingType: "full_numbers", paging: true, searching: false, //屏蔽datatales的查詢框 dom: 'rt<"row"<"col-md-4" i><"col-md-8"p>>', processing: true, serverSide: true, columns: [ { title: "編號", data: "Uid", visible: true }, { title: "賬號", data: "Account" }, { title: "密碼", data: "PassWord" }, { title: "狀態", data: "StatusName" }, { title: "時間", data: "CreateTime" }, ], ajax: { url: '/User/GetUserList', type: 'POST' } });
其他配置就不說了,就只說說dom吧,這個配置項是操作 搜索、數據信息、按鈕、每頁顯示多少條這幾個選項的的位置
<div><div>
<div id='id'><div>
<div class='class'><div>
<div id='id' class='class'><div>
要顯示什麼元素,顯示在什麼位置自己安排就好了,我比較習慣上邊的篩選項自己定義,所以表格上的信息就被我隱藏掉了.
下面展示一下後端的代碼,比較簡單沒有做什麼抽象之類的
public ActionResult GetUserList() { UserInfo query = new UserInfo { PageStart = Convert.ToInt32(Request.Form.Get("start")), PageEnd = Convert.ToInt32(Request.Form.Get("length")) }; var data = userInfoService.FindUserInfoList(query).ToList(); int count = userInfoService.FindUserInfoListCount(query); DataTableModel<UserInfo> model = new DataTableModel<UserInfo>() { draw = Convert.ToInt32(Request.Form.Get("draw")), recordsTotal = count, recordsFiltered = count, data = data, error = string.Empty }; var iso = new Newtonsoft.Json.Converters.IsoDateTimeConverter(); iso.DateTimeFormat = "yyyy-MM-dd HH:mm:ss"; object obj = new object(); return Content(Newtonsoft.Json.JsonConvert.SerializeObject(model, iso)); }
這裡還要說下注意的地方,
Request.Form.Get("draw") 請求次數計數器,每次發送給服務器後又原封返回,不用做什麼處理,切記一定要返回,不然錯哪你都不知道。 Request.Form.Get("start") 第一條數據的起始位置,從0開始, 頁碼*頁數=start 如果你用的是mysql數據庫,就方便了 limit start,length 就可以了 Request.Form.Get("length") 每頁顯示的條數
dataTables 接受的參數必須按照下面這樣,它才會認識
{ "draw": 2, "recordsTotal": 24, "recordsFiltered": 24, "data": [ { "Uid": 1, "Account": "[email protected]", "PassWord": "123456", }, { "Uid":2, "Account": "[email protected]", "PassWord": "456123", } ], "error": "" }
這樣綁定就成功了,其他的參數有不太明白的可以自行百度,或者去官網看一看。