0
私はASP.net MVCソリューションを使用しており、jqGridを使用しています。より良いパフォーマンスを得るために、私はオプションとしてloadonce: false
を使用します。この方法で行う必要があります。残念ながら、jqGridではサポートされていないようです。loadonceオプションがfalseに設定されている場合、jqGrid export excelの問題
$(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歳で、何年も前から死んでいます。私はあなたの声明を理解していません: "私は、1つのクライアント側の方法の代わりにいくつかのサーバー側の方法を避けようとしています"。サーバー側の並べ替えまたはクライアント側の並べ替えを行いますか?何行のデータを表示する必要がありますか?少数の行(<1000)の場合は、クライアント側のページング、ソート、およびフィルタリングを使用する必要があります。サーバー側と同じように、より迅速に動作します。 5000行の[デモ](http://www.ok-soft-gmbh.com/jqGrid/OK/performane-13-5000-25-free-jqgrid.htm)を試してみてください – Oleg