在撰寫MVC中常常會使用到很多的JQuery的套件,其中又以Data Table最常使用(結合分頁、查詢與資料顯示的功能),而最近饅頭常常使用這個套件,但套件也沒有中文名稱,因此饅頭打算在此分享一下使用的方法與說明!
一開始使用前要到http://datatables.net/download/下載DataTables的JavaScript與相關的CSS檔案,並且放入專案中
將JS及CSS檔案放入專案後,我們新增一個Class讓我們接收DataTables的請求參數
在撰寫MVC中常常會使用到很多的JQuery的套件,其中又以Data Table最常使用(結合分頁、查詢與資料顯示的功能),而最近饅頭常常使用這個套件,但套件也沒有中文名稱,因此饅頭打算在此分享一下使用的方法與說明!
一開始使用前要到http://datatables.net/download/下載DataTables的JavaScript與相關的CSS檔案,並且放入專案中
將JS及CSS檔案放入專案後,我們新增一個Class讓我們接收DataTables的請求參數
public class DataTableParamModel
{
///
/// 請求的次數序號
///
public string sEcho { get; set; }
///
/// 查詢用的資料
///
public string sSearch { get; set; }
///
/// 一頁要顯示幾筆資料
///
public int iDisplayLength { get; set; }
///
/// 第一筆資料的位置
///
public int iDisplayStart { get; set; }
///
/// 在表中的列數
///
public int iColumns { get; set; }
///
/// 用哪一個欄位進行排序
///
public int iSortingCols { get; set; }
///
/// 欄位的名稱
///
public string sColumns { get; set; }
}
以及另外一個Class來放置回傳的資料
public class DataTableResultModel where T :class
{
//相關參數
public String sEcho { get; set; }
public int iTotalRecords { get; set; }
public int iTotalDisplayRecords { get; set; }
//回傳資料
public IEnumerable aaData { get; set; }
}
建立好這兩個Class後,我們就可以開始寫畫面該如何呈現了
首先先新增一個API的Controller,並且在Controller新增一個Get的Method
[FromUri] DataTableParamModel Param是用來告訴API說Model的資料是來自Uri
public DataTableResultModel Get([FromUri] DataTableParamModel Param)
{
DataTableServices Services = new DataTableServices();
return Services.Read(Param);
}
//Services Code
public DataTableResultModel Read(DataTableParamModel InputData)
{
DataTableResultModel OutputData = new DataTableResultModel();
Expression- > Filter = x => x.Display == false;
///查詢的邏輯
OutputData.iTotalDisplayRecords = //計算共顯示幾筆資料
OutputData.iTotalRecords = OutputData.iTotalRecords =
(int)Math.Ceiling((Double)OutputData.iTotalDisplayRecords / (Double)InputData.iDisplayLength);//總共有幾頁
OutputData.sEcho = HttpContext.Current.Request.QueryString["sEcho"];
return OutputData;
}
/itemdisplaymodel>
接下來建立View準備一個Table的html tag像似
<table class="table table-striped table-bordered table-hover" id="DataTables">
<thead>
<tr role="row">
<th data-name="ItemId" style="width: 5%;">#</th>
<th data-name="Name" style="width: 25%;">商品名稱</th>
<th data-name="Price" style="width: 10%;">商品價格</th>
<th data-name="Display" style="width: 10%;">商品狀態</th>
<th data-name="Image" style="width: 20%;">商品圖片</th>
<th data-name="Message" style="width: 30%;">商品描述</th>
</tr>
</thead>
<tbody></tbody>
</table>
thead是之後用來呈現資料欄位
data-name用來指定datatable的欄位名稱
th是顯示給使用者看的欄位名稱
接下來就是重要的JS的參數設定與產生DataTable了
產生DataTable的指令就是dataTable這個函數,而記得選擇一個選擇器來執行喔!
$(function () {
var oTable = $('#DataTables').dataTable({
"aaSorting": [[0, 'asc']],//初始排序欄位
"bFilter": true,//是否有搜尋資料的input
"bAutoWidth": false,//是否要自動欄寬
"bScrollCollapse": false,
"bPaginate": true,
"bLengthChange": true,
"bDeferRender": true,
"bServerSide": true,//資料是否來自伺服器
"bProcessing": true,//顯示處理中的圖樣
"sDom": "<'row'<'col-sm-offset-8 col-sm-3'f><'col-sm-1' l>t>" + "r" + "<'row'<'col-sm-6'i><'col-sm-6'p>>",//設定搜尋與資料長度
"sEcho": 1,//起始Echo
"sAjaxSource":,//若資料來自伺服器,在此填寫URL
"iDisplayLength": 10,//出史資料大小
"aoColumns": [//(重要)欄位對應,可以讓伺服器回傳的資料可以在頁面上對應
{ "mData": "Id" },
{ "mData": "Name" },
{ "mData": "Price" },
{ "mData": "Display" },
{ "mData": "Image" },
{ "mData": "Message" }
],//設定語言
"oLanguage": {
"sLengthMenu": " _MENU_ 筆/頁",
"sZeroRecords": "找不到符合的資料。",
"sInfo": "共 _MAX_ 頁",
"sSearch": "搜尋",
"sInfoFiltered": " - 找到 _TOTAL_ 筆 資料",
"sInfoEmpty": "共 0 頁",
"oPaginate": {
"sPrevious": "«",
"sNext": "»"
}
}
});
});
如此一來就可以出現一個好看的DataTable囉!
大家好我是饅頭,希望大家喜歡我的文章
如果有錯誤的地方請不吝指教 ^_^