asp.net-mvcjqgridmvcjqgrid

jqgrid not showing any results when count exceeds ~9000


I am using jqgrid version 4.1.2 with MVC4, using loadonce option. When the search result's count exceeds approximately 9000 records, no data is shown up on the grid.

What might be the issue?

Here is the JS code: Update 1

function showCompletedGrid() {
// Set up the jquery grid
$("#jqTableCompleted").jqGrid({
    // Ajax related configurations
    url: jqDataUrl,
    datatype: "json",
    mtype: "POST",
    loadonce: true,
    loadtext: 'Loading Data please wait ...',


    postData: { strUserName: function () { return $('#ddlUserName :selected').val(); },
        strFunctionName: function () { return $('#ddlOPMSFunction :selected').text(); },
        strProcName: function () { return $('#ddlOPMSProcess :selected').text(); },
        strCategory: function () { return $('#ddlSearchCategory :selected').text(); },
        strWorkType: function () { return $('#ddlSearchWorkType :selected').text(); },
        strRequestNumber: function () { return $('#txtRequestNo').val(); },
        strStatus: function () { return $('#ddlSearchStatus :selected').text(); },
        strFromDate: function () { return $('#txtFromDate').val().toString(); }, //datepicker('getDate'),
        strToDate: function () { return $('#txtToDate').val().toString(); }, //datepicker('getDate'),
        strAction: "Closed"
    },
    autowidth: true,
    shrinkToFit: true,
    // Specify the column names
    colNames: ["S.No.", "User Name", "Category", "Work Type", "Request Number", "Status", "Time Spent", "RE", "GUID", "Marked for Correction", "Correction Complete", "Reason", "Task Type", "acf2id", "Created Date", "Action", "IsTeam"],

    // Configure the columns
    colModel: [
                { name: "SNo", index: "SNo", sorttype: 'int', width: 100, align: "left", hidden: true, sortable: true, search: true, searchoptions: { sopt: ['eq']} },
                { name: "UserName", index: "UserName", width: 200, align: "left", sortable: true, search: true, sorttype: 'string', searchoptions: { sopt: ['cn']} },
                { name: "Category", index: "Category", width: 200, align: "left", sortable: true, search: true, sorttype: 'string', searchoptions: { sopt: ['cn']} },
                { name: "WorkType", index: "WorkType", width: 200, align: "left", sortable: true, search: true, sorttype: 'string', searchoptions: { sopt: ['cn']} },
                { name: "RequestNumber", index: "RequestNumber", width: 200, align: "left", sortable: true, search: true, searchoptions: { sopt: ['cn']} },
                { name: "Status", index: "Status", width: 200, align: "left", sortable: true, search: true, sorttype: 'string', searchoptions: { sopt: ['cn']} },
                { name: "TimeSpent", index: "TimeSpent", width: 200, align: "left", sortable: true, search: true },
                { name: "RE", index: "RE", width: 200, align: "left", sortable: true, search: true },
                { name: "GUID", index: "GUID", sortable: false, search: false, width: 200, align: "left", hidden: true },
                { name: "MarkCorrection", index: "MarkCorrection", width: 200, align: "left", hidden: true, sortable: true, search: true, sorttype: 'string', searchoptions: { sopt: ['cn']} },
                { name: "CorrectionComplete", index: "CorrectionComplete", width: 200, align: "left", hidden: true, sortable: true, search: true, sorttype: 'string', searchoptions: { sopt: ['cn']} },
                { name: "Reason", index: "Reason", width: 200, align: "left", hidden: true, sortable: true, search: true, sorttype: 'string', searchoptions: { sopt: ['cn']} },
                { name: "TaskType", index: "TaskType", width: 200, align: "left", sortable: true, search: true, sorttype: 'string', searchoptions: { sopt: ['cn']} },
                { name: "acf2id", index: "acf2id", width: 200, align: "left", hidden: true, sortable: true, search: true, sorttype: 'string', searchoptions: { sopt: ['cn']} },
                { name: "CreatedDate", index: "CreatedDate", width: 200, align: "left", hidden: false, search: false },
                { name: 'Actions', sortable: false, search: false, fixed: true, align: 'center', formatter: returnHyperLinkCompleted },
                { name: 'IsTeam', sortable: false, hidden: true, search: false, fixed: true, align: 'center' }
              ],
    ignoreCase: true,
    //width: 1250,
    height: 150,

    // Paging
    toppager: true,
    pager: $("#jqTableCompletedPager"),
    //rowTotal: 200,
    rowNum: 20,
    rowList: [20, 15, 10, 5],
    viewrecords: true,
    emptyrecords: "",
    hiddengrid: true,

    // Default sorting
    sortname: "SNo",
    sortorder: "asc",

    // Grid caption
    caption: "Closed",
    loadComplete: function (data) {

        var RE;
        var TimeSpent;
        var rowIDs = jQuery("#jqTableCompleted").jqGrid('getDataIDs');
        for (var i = 0; i < rowIDs.length; i++) {
            var rowID = rowIDs[i];
            var row = jQuery('#jqTableCompleted').jqGrid('getRowData', rowID);

            RE = hmsToSecondsOnly(row.RE);
            RE = (0.2 * RE) + RE;
            TimeSpent = hmsToSecondsOnly(row.TimeSpent);
            if (TimeSpent > RE && RE > 0) {
                $(row).removeClass('ui-widget-content');
                $(row).removeClass('ui-state-highlight');
                $("#jqTableCompleted tr[id='" + rowID + "']").addClass('myColor');

            }
        }
    }
}).navGrid("#jqTableCompletedPager",
        { refresh: true, add: false, edit: false, del: false },
            {}, // settings for edit
            {}, // settings for add
            {}, // settings for delete
            {sopt: ["cn"]}
     );

$("#jqTableCompleted").jqGrid('navGrid', '#jqTableCompletedPager', { del: false, add: false, edit: false, search: false });
$("#jqTableCompleted").jqGrid('filterToolbar', { searchOnEnter: false, searchOperators: true });

$("#jqTableCompleted").jqGrid('navButtonAdd', '#jqTableCompletedPager',
{ caption: "Export to Excel", buttonicon: "ui-icon-extlink", title: "Export", id: "btnExport",
    onClickButton: function (evt) {
        var UserName = $('#ddlUserName option:selected').val();
        var RequestNumber = $('#txtRequestNo').val();
        var FunctionName = encodeURIComponent($('#ddlOPMSFunction option:selected').text());
        var ProcessName = encodeURIComponent($('#ddlOPMSProcess option:selected').text());
        var Category = $('#ddlSearchCategory option:selected').text();
        var WorkTypeName = $('#ddlSearchWorkType option:selected').text();
        var SearchStatus = $('#ddlSearchStatus option:selected').text();
        var TransactionStartTS = $('#txtFromDate').val().toString();
        var TransactionEndTS = $('#txtToDate').val().toString();

        window.open("../Search/Export?UserName=" + UserName + "&RequestNumber=" + RequestNumber + "&FunctionName=" + FunctionName + "&ProcessName=" + ProcessName + "&Category=" + Category + "&WorkTypeName=" + WorkTypeName + "&SearchStatus=" + SearchStatus + "&TransactionStartTS=" + TransactionStartTS + "&TransactionEndTS=" + TransactionEndTS + "&ActionName=" + "Closed");
    }
});

}

Although the data is being returned and in the correct format, from the controller, as follows, the grid does not show any result.

var jsonData = new
            {
                page = page,
                rows = data
            };

            return Json(jsonData, JsonRequestBehavior.AllowGet);

Also is there any limit on number of records or dependency on the browser when returning all the data from server using the loadonce option?

Any help would be much appreciated. Thanks.


Solution

  • Finally I found the solution for the above problem by tracing the request in Fiddler, in the response title following error was shown:

    Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property.

    Upon searching for the above error, I found a workaround: Here

    Basically the problem area was not the jqGrid, but was MaxJsonLength property of JavaScriptSerializer which defaults to 2097152 characters ~ 4 MB of data. Source: MaxJsonLength

    To get it working, I replaced the following code in my Action method:

    return Json(jsonData, JsonRequestBehavior.AllowGet);
    

    with:

    var jsonResult = Json(jsonData, JsonRequestBehavior.AllowGet);
                jsonResult.MaxJsonLength = int.MaxValue;
                return jsonResult;
    

    Thanks.