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吧,這個配置項是操作 搜尋、資料資訊、按鈕、每頁顯示多少條這幾個選項的的位置
- l - Length changing 改變每頁顯示多少條資料的控件
- f - Filtering input 即時搜尋框控件
- t - The Table 表格本身
- i - Information 表格相關資訊控件
- p - Pagination 分頁控件
- r - pRocessing 加載等待顯示資訊
- < > - div elements 代表一個div元素
<div><div>
- <"#id" > - div with an id 指定了id的div元素
<div id='id'><div>
- <"class" > - div with a class 指定了樣式名的div元素
<div class='class'><div>
- <"#id.class" > - div with an id and class 指定了id和樣式的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": ""
}
這樣綁定就成功了,其他的參數有不太明白的可以自行百度,或者去官網看一看。