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": "aaaaaa@hotmail.com",
"PassWord": "123456",
},
{
"Uid":2,
"Account": "bbbbb@hotmail.com",
"PassWord": "456123",
}
],
"error": ""
}
這樣綁定就成功了,其他的參數有不太明白的可以自行百度,或者去官網看一看。