0
ASP.net MVC 솔루션이 있고 jqGrid를 사용하고 있습니다. 더 나은 성능을 얻으려면 옵션으로 loadonce: false
을 사용하고이 방법으로해야합니다. 불행히도 jqGrid에서 지원하지 않는 것 같습니다. 내 검색을 통해 그 기호를 찾을 수 없기 때문입니다.loadonce 옵션이 false로 설정된 경우 jqGrid 내보내기 문제가 발생합니다.
$(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;
}
상업용 [Guriddo jqGrid JS] (http : //www.jqGrid.com)의 jqGrid ([free jqGrid] (https://github.com/free-jqgrid/jqGrid) /guriddo.net/?page_id=103334) 또는 버전 <= 4.7의 이전 jqGrid? 'loadonce : true'를 사용하는 경우 jqGrid의 나쁜 성능에 대해 작성합니다. 그것은 이상하게 들린다. 얼마나 많은 총 행 수가 표시되어야합니까? 서버에 데이터가 있으면 서버 코드 *를 Excel로 내보내는 것이 좋습니다. [이전 답변] (http://stackoverflow.com/a/9349688/315935) 및 [this one] (http://stackoverflow.com/a/13957161/315935)을 참조하십시오. – Oleg
현재 jqGrid 버전 4.4를 사용하고 있지만 4.8 이상의 버전에서 내보내기 옵션을 찾을 수 있도록 업그레이드 할 예정입니다. 내 전체 솔루션 21 그리드 및 각 다른 설정 (URL, postData, ...) 그래서 한 클라이언트 쪽 메서드 대신 여러 서버 쪽 메서드를 피하기 위해 노력하고있다. 또한 무료 jqGrid를 사용합니다. –
무료 jqGrid의 현재 버전은 4.13.6 (4.8 아님)입니다. 버전 4.4.4는 4 살이며 다년간 죽었습니다. 저는 귀하의 성명서를 이해하지 못합니다. "한 가지 클라이언트 측 방법 대신 여러 가지 서버 측 방법을 피하려고합니다." 서버 측 정렬 또는 클라이언트 측 정렬을 원하십니까? 몇 행의 데이터를 표시해야합니까? 행 수가 적을 경우 (<1000) 클라이언트 쪽 페이징, 정렬 및 필터링을 사용해야합니다. 서버 측만큼 빠르게 작동합니다. 5000 개의 행이있는 [데모] (http://www.ok-soft-gmbh.com/jqGrid/OK/performane-13-5000-25-free-jqgrid.htm)를 사용해보십시오. – Oleg