01/10/2018, 16:04

Thắc mắc khi sử dụng thư viện datatable

mình có làm theo bài hướng dẫn này về sách sử dụng thư viện datatable

c-sharpcorner.com

Using DataTables Grid With ASP.NET MVC

In this article, we are going to learn how to use DataTables Grid with ASP.NET MVC in step by step way.


code của mình đây : ở phía clinet

{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <script src="https://daynhauhoc.com//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <link href="~/Content/bootstrap.css" rel="stylesheet" />

    <link href="https://cdn.datatables.net/1.10.15/css/dataTables.bootstrap.min.css" rel="stylesheet" />
    <link href="https://cdn.datatables.net/responsive/2.1.1/css/responsive.bootstrap.min.css" rel="stylesheet" />

    <script src="https://cdn.datatables.net/1.10.15/js/jquery.dataTables.min.js"></script>
    <script src="https://cdn.datatables.net/1.10.15/js/dataTables.bootstrap4.min.js "></script>
    <script>
        $("document").ready(function () {
            $("#demoGrid").DataTable({
                "processing": true, //for show pro
                "serverSide": true,
                "filter": true,
                "orderMulti": true,
                "pageLength": 5,
                "order": [[0, 'asc'], [1, 'asc']],
                "ajax": {
                    "url": "/Demo/LoadData",
                    "type": "POST",
                    "dataType": "json"
                },

                "columns": [
                    { "data": "NameStyle", "name": "NameStyle", "title": "Name Style", "autoWidth": true },
                    { "data": "Title", "name": "title", "title": "Title", "autoWidth": true },
                    { "data": "FirstName", "name": "FirstName", "title": "First Name", "autoWidth": true },
                    { "data": "MiddleName", "name": "MiddleName", "title": "Middel Name", "autoWidth": true },
                    { "data": "LastName", "name": "LastName", "title": "Last Name", "autoWidth": true },
                    { "data": "Suffix", "name": "Suffix", "title": "Suffix", "autoWidth": true },
                    { "data": "EmailPromotion", "name": "EmailPromotion", "title": "Email", "autoWidth": true }
                ]
            });
        });
    </script>
</head>
<body>
    <div>
        <div style="width:90%; margin:0 auto;">
            <table id="demoGrid" class="table table-striped table-bordered dt-responsive nowrap" width="100%" cellspacing="0">
                <thead>
                    <tr>
                        <th>Name Style</th>
                        <th>Title</th>
                        <th>First Name</th>
                        <th>Middel Name</th>
                        <th>Last Name</th>
                        <th>Suffix</th>
                        <th>Email</th>
                    </tr>
                </thead>
            </table>
        </div>
    </div>
</body>
</html>

ở phía phần server xử lý như sau

 public ActionResult LoadData()
        {
            try
            {
                using (AdventureWorks2016CTP3Entities _entities = new AdventureWorks2016CTP3Entities())
                {
                    var draw = Request.Form.GetValues("draw").FirstOrDefault();
                    var start = Request.Form.GetValues("start").FirstOrDefault();
                    var length = Request.Form.GetValues("length").FirstOrDefault();
                    var sortColumn = Request.Form
                        .GetValues("columns[" + Request.Form.GetValues("order[0][column]").FirstOrDefault() + "][name]")
                        .FirstOrDefault();
                    var sortColumnDir = Request.Form.GetValues("order[0][dir]").FirstOrDefault();
                    var searchValue = Request.Form.GetValues("search[value]").FirstOrDefault();

                    var test = Request.Form.GetValues("order[0][column]").FirstOrDefault();
                    //paging  Size
                    int pageSize = length != null ? Convert.ToInt32(length) : 0;
                    int skip = start != null ? Convert.ToInt32(start) : 0;
                    int recordsTotal = 0;

                    //getting all Prson
                    var listPerson = (from sa in _entities.People
                                      select sa);

                    //Sorting
                    if (!(string.IsNullOrEmpty(sortColumn) && string.IsNullOrEmpty(sortColumnDir)))
                    {
                        listPerson = listPerson.OrderBy(sortColumn + " " + sortColumnDir);
                    }

                    if (!string.IsNullOrEmpty(searchValue))
                    {
                        listPerson = listPerson.Where(s => s.FirstName == searchValue);
                    }

                    //total number  of list
                    recordsTotal = listPerson.Count();
                    //Paging
                    var data = listPerson.Skip(skip).Take(pageSize).ToList(); ;

                    return Json(new { draw = draw, recordsFiltered = recordsTotal, recordTotal = recordsTotal, data = data });
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

khi mình sử dụng thư viên datatable thì để lấy về giá trị của cột nào được sort thì có dòng code như sau

var sortColumn = Request.Form
                        .GetValues("columns[" + Request.Form.GetValues("order[0][column]").FirstOrDefault() + "][name]")
                        .FirstOrDefault();

và thực sự mình vẫn chưa hiểu lắm tại sao phải luôn luôn order[0] thì mới get được xem cột nào cần được sort
nếu mình thử thay thế cột order[0] thành order[1] thì sẽ có giá trị là null thực sự mình chưa thông đoạn này lắm .bạn nào thông cho mình phát .Thanh you @Hao
https://datatables.net/manual/server-side

ACP viết 18:18 ngày 01/10/2018

Nếu được thì bạn nên post code dài hơn 1 chút: cái datatable của bạn ra sao chứ nhìn như vậy thì không thể nào lần ra được

ACP viết 18:07 ngày 01/10/2018

Theo https://datatables.net thì: order[i] - is an array defining how many columns are being ordered upon - i.e. if the array length is 1, then a single column sort is being performed, otherwise a multi-column sort is being performed. tức là biến order được truyền qua lại giữa Client và Server luôn là 1 array + cái demo của https://www.c-sharpcorner.com set orderMulti = false => Cái array này luôn có 1 phần tử nên chỉ có order[0] mới có value

Nhưng trong ví dụ của bạn ở trên thì orderMulti của bạn đã được set bằng true thì mình chưa rõ là code hiện tại có chạy giống demo không. Như vậy là đủ để trả lời câu hỏi của bạn chưa nhỉ

Bài liên quan
0