У меня есть решение ASP.net MVC и использование jqGrid в нем. Чтобы иметь лучшую производительность, я использую loadonce: false
в качестве опции, и это должно быть таким образом, к сожалению, похоже, это не поддерживается jqGrid, потому что я не могу найти никаких признаков этого во время моего поиска.jqGrid export to excel issue, когда опция loadonce установлена на false
$(document).ready(function() {
$("#jqGrid").jqGrid(
{
url: "/Student/GetStudents",
mtype: "GET",
datatype: "json",
contentType: "application/json; charset-utf-8",
jsonReader: {
root: "rows",
id: "StudentId",
repeatitems: false
},
colNames: ['StudentId', 'FirstName', 'LastName'],
colModel: [
{ label: 'StudentId', name: 'Id', key: true, width: 75 },
{ label: 'FirstName', name: 'FirstName', width: 150 },
{ label: 'LastName', name: 'LastName', width: 150 },
],
viewrecords: true,
loadonce: false,
width: '100%',
height: 'auto',
rowNum: 20,
rowList: [20, 30, 50],
sortable: true,
sortname: 'Id',
pager: "#jqGridPager",
autoencode: true,
scroll: false,
pgbuttons: true,
autowidth: true,
shrinkToFit: false,
forceFit: false,
gridview: false,
height: '100%',
scrollrows: true,
page: 1,
//pagerpos: 'center',
toppager: true,
recordpos: 'right',
multiselect: true,
multiboxonly: true,
direction: 'rtl',
ignoreCase: true,
caption: "",
rownumbers: true
});
$('#jqGrid').jqGrid('navGrid', '#jqGridPager', {
search: true,
searchtext: "Search",
edit: false,
add: false,
del: false,
excel: true,
refresh: false,
}, {}, {}, {}, {
closeOnEscape: true,
closeAfterSearch: true,
ignoreCase: true,
multipleSearch: false,
multipleGroup: false,
showQuery: false,
sopt: ['cn', 'eq', 'ne'],
defaultSearch: 'cn'
})
$('#jqGrid').jqGrid('navButtonAdd', '#jqGridPager', {
caption: "Export to Excel",
//buttonicon: "ui-icon-disk",
buttonicon: "ui-icon-folder-open",
onClickButton: function() {
exportToExcel();
},
});
});
function exportToExcel(data, e) {
exportExcelFile(data);
}
function exportExcelFile() {
debugger;
var data = $('#jqGrid')[0].addLocalData(true);
var ua = window.navigator.userAgent;
var msie = ua.indexOf("MSIE");
if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {
frame1.document.open("txt/html", "replace");
frame1.document.write(setTableOfData(data));
frame1.document.close();
frame1.focus();
sa = frame1.document.execCommand("SaveAs", true, "text.xls");
} else
$('#jqGrid').jqGrid('exportToExcel', { fileName: "exportedExcel.xls", navigator: true });
}
function setTableOfData(data) {
var htmlString = '<table>';
var header = '<tr><td>StudentId</td><td>FirstName</td><td>LastName</td></tr>';
htmlString += header;
for (var i = 0; i < data.length; i++) {
var tag = '<tr><td>' + data[i].Id + '</td><td>' + data[i].FirstName + '</td><td>' + data[i].LastName + '</td></tr>';
htmlString += tag;
}
htmlString += '</table>';
return htmlString;
}
Какую версию jqGrid вы используете (можете использовать) и из которой вилка jqGrid ([free jqGrid] (https://github.com/free-jqgrid/jqGrid), коммерческая [Guriddo jqGrid JS] (http: /guriddo.net/?page_id=103334) или старый jqGrid в версии <= 4.7)? Вы пишете о плохой производительности jqGrid в случае использования 'loadonce: true'. Это звучит странно. Сколько всего строк должно отображаться? У вас есть данные на сервере, тогда лучше, чтобы * код сервера * экспортировался в Excel. См. [Старый ответ] (http://stackoverflow.com/a/9349688/315935) и [этот] (http://stackoverflow.com/a/13957161/315935). – Oleg
В настоящее время я использую версию 4.4 jqGrid, но я нахожу опцию экспорта в версиях выше 4.8, поэтому я ее обновлю. У меня более 21 сетки в моем решении, и у каждого из них разные настройки (url, postData, ...), поэтому я стараюсь избегать нескольких методов на стороне сервера вместо одного метода на стороне клиента. Кроме того, я использую бесплатный jqGrid. –
Текущая версия бесплатного jqGrid - 4.13.6 (не 4.8). Версия 4.4.4 исполняется 4 года, и она мертва с многих лет. Я не понимаю вашего утверждения: «Я стараюсь избегать нескольких методов на стороне сервера вместо одного метода на стороне клиента». Вы хотите иметь сортировку на стороне сервера или сортировку на стороне клиента? Сколько строк данных необходимо отобразить? В случае небольшого количества строк (<1000) следует использовать подкачку, сортировку и фильтрацию на стороне клиента. Он работает намного быстрее, чем на стороне сервера. Попробуйте [demo] (http://www.ok-soft-gmbh.com/jqGrid/OK/performane-13-5000-25-free-jqgrid.htm) с 5000 строк – Oleg