datatables.js 簡單使用--多選框和服務器端分頁

說明:datatables是一款jQuery表格插件。感受EasyUI的datagrid更易用javascript

內容:多選框和服務器端分頁css

原因:寫這篇博客的緣由是datatables的文檔寫的不怎麼樣,找東西很麻煩html

環境:asp.net mvc ,  vs2015+sqlserver2012前端

顯示效果:java

   

代碼:ajax

   html部分:sql

<table id="tbUserList" class="table table-bordered table-hover">
    <thead class="text-center ">
        <tr>
            <th>
                <input type="checkbox" class="checkall" />
            </th>
            <th>ID</th>
            <th>菜單名稱</th>
            <th>菜單路徑</th>
            <th>排序</th>
            <th>添加日期</th>
        </tr>
    </thead>

    <tfoot class="text-center ">
        <tr>
            <th>
                <input type="checkbox" class="checkall" />
            </th>
            <th>ID</th>
            <th>菜單名稱</th>
            <th>菜單路徑</th>
            <th>排序</th>
            <th>添加日期</th>
        </tr>
    </tfoot>
</table>

 JS部分:json

$(function () {
    var _dataTables = $('#tbUserList').DataTable({              
        "lengthChange": false,
        "searching": false,
        "ordering": true,
        "info": true,
        "autoWidth": false,
        "pageLength": 10,
        "serverSide": true,             
        "ajax": {
            "url": "/BasicManage/GetMenus",
            "type":"POST"
        },
        "columns": [
             {
                 "sClass": "text-center",
                 "data": "ID",
                 "render": function (data, type, full, meta) {
                     return '<input type="checkbox"  class="checkchild"  value="' + data + '" />';
                 },
                 "bSortable": false
             },
             { "data": "ID" },
             { "data": "Name" },
             { "data": "MenuPage" },
             { "data": "SortNo" },
             { "data": "AddDateStr" }                  
        ]
    });

 JS部分簡單說明:後端

    "serverSide": true啓動服務器端分頁服務器

    "pageLength": 10 每頁10條記錄,注意pageLength注意大小寫對應的值必定要是數字,,由於datatables的js裏沒有對這項類型轉換,寫成字符串會出問題。

     看下面的源碼

    

    "ajax": 這個就不用說了,去哪取數據

    」columns「: 這個的文檔在這裏 http://datatables.net/reference/option/columns

         裏面{}的順序對應表格中列的位置。

         」data「:對應的是後臺傳過來數據的key

         重點說第一個{},是用來在第一列加一列多選框的。

         」sClass「:"text-center"  設置的class名,多選框會居中顯示,能夠去datatables的css裏搜索這個class名看具體設置

         "data": "ID"  這是要用到的數據,我把checkbox的value設置爲ID,這樣方便取值

         」render「 這裏就是要顯示的checkbox多選框了

如何實現全選

       注意這裏用prop

 $(".checkall").click(function () {
      var check = $(this).prop("checked");
      $(".checkchild").prop("checked", check);
});

    獲取選中的某一個checkbox的值

    if ($(".checkchild:checked").length > 1)
          {
               alert("一次只能修改一條數據");
               return;
          }

    var id = $(".checkchild:checked").val();

服務器後端如何傳數據

     

 public JsonResult GetMenus()
        {
            int draw = Convert.ToInt32(Request["draw"]);
            int start = Convert.ToInt32(Request["start"]);
            int length = Convert.ToInt32(Request["length"]);
            int totalCount = 0;
            MenuDAO Dao = new MenuDAO();
            var menus = Dao.GetMvcMenus((start/length)+1, length, out totalCount);
            return Json(new {  draw= draw, recordsTotal= totalCount, recordsFiltered= totalCount, data = menus }, JsonRequestBehavior.AllowGet);
        }

 說明: 前端會向後臺傳一些數據

       draw:這個不用關心,直接給它返回去就行了,注意要變成int類型

       start: 從第幾條記錄開始,從0開始計數,若是你每頁設置10條記錄,第一頁傳0,第二頁傳10,類推

       length: 每頁的記錄條數,對應的前端js設置的pageLength。

       返回json :Json(new { draw= draw, recordsTotal= totalCount, recordsFiltered= totalCount, data = menus }, JsonRequestBehavior.AllowGet);

       recordsTotal,recordsFiltered這兩個都填總記錄數就好了,data裏就是實際的數據

       menus是一個 IEnumerable<Menu>集合  

Menu menu = new Menu();
return menu.Select().Where().And("MenuType", "mvc").ExecPageDataTable("ORDER BY ParentID",row,pageSize,out totalCount,Db
    .AsEnumerable().Select(d =>
    new Menu
    {
        ID = d.Field<int>("ID"),
        Name = d.Field<string>("Name"),
        MenuPage = d.Field<string>("MenuPage"),
        IconUrl = d.Field<string>("IconUrl"),
        SortNo = d.Field<double?>("SortNo"),
        Remark = d.Field<string>("Remark"),
        ParentID = d.Field<int?>("ParentID"),
        AddDateStr = d.Field<DateTime?>("AddDate").ToString()
    });

   題外話:在sqlserver2012上寫分頁sql很是簡單,聽說性能也有提高(沒測試過)

          Select *  from  某表  ORDER BY 某些列   OFFSET (@row-1)*@pageSize ROWS FETCH NEXT @pageSize ROWS ONLY

              替換相應參數  @row 取第幾頁, @pageSize 取多少條

相關文章
相關標籤/搜索