Search code examples
jquerydatatablespagination

Using jquery datatables. Why isnt paging working?


It is also showing ALL of the records instead of '11 of 14 out of 14' for example.. How do I communicate to send only 10 at a time ? I used this article as a tutorial

http://www.codeproject.com/Articles/155422/jQuery-DataTables-and-ASP-NET-MVC-Integration-Part

    public ActionResult GetCurrentErrorsAJAX(JQueryDataTableParamModel param)
    {
        List<StepInstanceError> allCompanies = new List<StepInstanceError>();
        allCompanies = InstanceErrorExpert.GetAllErrors();

        IEnumerable<StepInstanceError> filteredCompanies;
        filteredCompanies = allCompanies;

        var sortColumnIndex = Convert.ToInt32(Request["iSortCol_0"]);
        Func<StepInstanceError, string> orderingFunction = (c => sortColumnIndex == 1 ? c.FilePath :
                                                            sortColumnIndex == 2 ? c.Notes :
                                                            c.Notes);

        var sortDirection = Request["sSortDir_0"]; // asc or desc
        if (sortDirection == "asc")
            filteredCompanies = filteredCompanies.OrderBy(item => orderingFunction);
        else
            filteredCompanies = filteredCompanies.OrderByDescending(item => orderingFunction);

        var displayedCompanies = filteredCompanies;

        var result = from c in displayedCompanies
                     select new[] { Convert.ToString(c.StepInstanceErrorID),
                                    Convert.ToString(c.StepInstanceID),
                                    Convert.ToString(c.ErrorRow),
                                    Convert.ToString(c.Notes),
                                    c.FilePath,
                                    c.Notes,
                                    Convert.ToString(c.DateCreated)
        };

        return Json(new
        {
            sEcho = param.sEcho,
            iTotalRecords = allCompanies.Count(),
            iTotalDisplayRecords = filteredCompanies.Count(),
            aaData = result
        },
                    JsonRequestBehavior.AllowGet);
    }

<script>
$(function () {
    var RefreshErrorTable = function () {
        var oTable = $('#myDataTable').dataTable({
            "bServerSide": true,
            "sAjaxSource": "Errors/GetCurrentErrorsAJAX",
            "bProcessing": true,
            "aoColumns": [
                            { "sName": "StepInstanceID" },
                            { "sName": "ErrorRow" },
                            { "sName": "FilePath" },
                            { "sName": "Notes" },
                            { "sName": "DateCreated" }
            ]
        });
    }

    RefreshErrorTable();
});


Solution

  • For server-side processing, DataTables also passes iDisplayStart and iDisplayLength.

    Your query should include this to limit the number of rows returned. Your example page shows this:

    var displayedCompanies = filteredCompanies
                            .Skip(param.iDisplayStart)
                            .Take(param.iDisplayLength); 
    

    Pagination (bPaginate) in DataTables should be enabled by default. The DataTables site is excellent and may be of some help: http://www.datatables.net/usage/features