的jqGrid导出到Excel问题时loadonce选项设置好的假
问题描述:
我有一个ASP.net MVC解决方案,并在其使用的jqGrid。为了获得更好的性能,我使用loadonce: false
作为选项,它应该是这样的,不幸的是,它似乎不被jqGrid支持,因为在我的搜索中找不到任何符号。的jqGrid导出到Excel问题时loadonce选项设置好的假
$(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;
}
答
最后,我强制将网格的所有过滤和其他设置发送到服务器,并返回链接到客户端。然后通过给定的链接,我可以下载excel文件。 信息:您无法下载带有发布(ajax)请求的文件。
您使用哪个版本的jqGrid(可以使用)以及从哪个版本的jqGrid([免费jqGrid](https://github.com/free-jqgrid/jqGrid),商业版[Guriddo jqGrid JS] /guriddo.net/?page_id=103334)还是旧版jqGrid版本 Oleg
目前我使用jqGrid版本4.4,但我发现在4.8以上版本的导出选项,所以我会升级它。我在整个解决方案中拥有超过21个网格,每个网格都有不同的设置(url,postData,...),所以我试图避免使用多个服务器端方法而不是一个客户端方法。另外我使用免费的jqGrid。 –
免费jqGrid的当前版本是4.13.6(不是4.8)。 4.4.4版本已有4年的历史,并且已经过了很多年。我不明白你的陈述:“我试图避免几种服务器端方法而不是一种客户端方法”。你想要进行服务器端排序还是客户端排序?需要显示多少行数据?如果行数较少( Oleg