I am using ASP.Net MVC4 with Entity Framework 6 for server side operations and using jqgrid extensively in many pages as it's solves my purpose. Currently I am using server side paging and sorting.
Now I have implemented search suggestions referring this demo. I have to show approx 70K suggestions initially but when I enter a character in search-box, my browser hangs. Sometimes it displays me suggestions but freezes to enter another character. I suppose it is happening because of large number of suggestions. I also looked here but not found a way. (Oleg, I am looking for you man!)
Please help me out to improve the performance of search suggestions. My jqgrid is as follows:
$("#DetailGrid").jqGrid({
url: dataTobind,
datatype: dataType,
rownumbers: false,
height: 400,
rowNum: 25,
mtype: 'POST',
colNames: ['ContactOrderNo', 'Contract Order Number', 'Serial Number', 'Model Number', 'Capacity', 'Contract Details'],
colModel: [
{ name: 'Capacity', width: 150, editable: false, hidden: true, sortable: false, editrules: { required: true } },
{
name: 'ContactOrderNo', width: 300, editable: false, sortable: false, hidden: false,searchoptions: {
dataInit: function (elem) {
// it demonstrates custom item rendering
$(elem).autocomplete({ source: 'GetAutocompleteData' });
}
},
formatter: function (cellvalue, options, rowObject) {
return '<a href="/OrderList/AddOrder/?ModelNo=' + cellvalue + '" >' + cellvalue + '</a>';
}
},
{ name: 'SerialNumber', width: 150, sortable: false, editable: false, editrules: { required: true } },
{ name: 'ModelNo', width: 150, sortable: false, search:true, editable: false, editrules: { required: true } },
{ name: 'Capacity', width: 150, sortable: false,search: false, editable: false, editrules: { required: true } },
{
name: 'ContractDetails', search: false, sortable: false, formatter: function (cellvalue)
{
var i, res = "", linkInfo;
if (cellvalue == null || !$.isArray(cellvalue)) {
return " "; // empty cell in case or error
}
for (i = 0; i < cellvalue.length; i++) {
linkInfo = cellvalue[i];
res += (res.length > 0 ? "<br/> " : "") +
'<a href="' + linkInfo.LinkSrc + '" target="_blank" >' +
linkInfo.LinkText + '</a>';
}
return res;
}
}
],
rowList : [10,20,30,50],
viewrecords: true,
gridview: true,
sortable: false,
loadonce: false,
cellsubmit: 'clientArray',
autowidth: true,
pager: '#DetailGridPager',
});
jQuery("#DetailGrid").trigger('reloadGrid');
$("#DetailGrid").jqGrid('navGrid', '#DetailGridPager', { edit: false, add: false, del: false, search: false, refresh: false });
$('#DetailGrid').jqGrid('filterToolbar', { stringResult: true, searchOnEnter: true, enableClear: false, defaultSearch: 'cn' });
And My controller is as follows :
public JsonResult GetAutocompleteData(string term)
{
var cxt = new AppDataContext();
return Json(cxt.Order.Where(t => t.ContactOrderNo.Contains(term)).Select(t => new { value = t.ContactOrderNo }).ToList(), JsonRequestBehavior.AllowGet);
}