我是JQuery的新手。
我正在尝试使用列出的here功能。
mya=$("#list").getDataIDs(); // Get All IDs
列出了仅在当前视图中的ID。但是我的网格是分页的。我如何获取所有ID?
这是我的代码:
$(document).ready(function () {
jQuery("#customer_list").jqGrid({
url:'jq_customer_list',
datatype: "json",
colNames:['Col1','Col2','Col3'],
colModel:[
{name:'Col1',index:'Col1', width:100},
{name:'Col2',index:'Col2', width:80},
{name:'Col3',index:'Col3', width:75},
],
rowNum:20,
rowList:[5,10,20],
mtype:"GET",
rownumber:true,
rownumWidth:40,
pager: $("#customer_list_pager"),
viewrecords: true,
gridview: true,
caption:"My Data",
height: '50%',
pagination:true
}).navGrid('#customer_list_pager', { search:true, del: false, add: false, edit: false,searchtext:"Search" },
{}, // default settings for edit
{}, // default settings for add
{}, // delete
{closeOnEscape: true, multipleSearch: true,
closeAfterSearch: true }, // search options
{}
).navButtonAdd('#customer_list_pager',{
caption:"Export to Excel",
buttonicon:"ui-icon-save",
onClickButton: function(){
exportExcel($(this));
},
position:"last"
});
function exportExcel($id){
alert('excelExport');
var keys=[], ii=0, rows="";
var ids=$id.getRowData(); // Get All IDs
var row=$id.getRowData(ids[0]); // Get First row to get the labels
for (var k in row) {
keys[ii++]=k; // capture col names
rows=rows+k+"\t"; // output each Column as tab delimited
}
rows=rows+"\n"; // Output header with end of line
for(i=0;i<ids.length;i++) {
row=$id.getRowData(ids[i]); // get each row
for(j=0;j<keys.length;j++) rows=rows+row[keys[j]]+"\t"; // output each Row as tab delimited
rows=rows+"\n"; // output each row with end of line
}
rows=rows+"\n"; // end of line at the end
var form = "<form name='csvexportform' action='excelExport' method='post'>";
form = form + "<input type='hidden' name='csvBuffer' value='"+rows+"'>";
form = form + "</form><script>document.csvexportform.submit();</sc"+"ript>";
OpenWindow=window.open('', '');
OpenWindow.document.write(form);
OpenWindow.document.close();
}
$("#customer_list").filterToolbar({autosearch:true });
});
答案 0 :(得分:6)
您使用datatype: "json"
而没有loadonce:true
。因此服务器负责排序和分页。因此,我将在仅限服务器代码中实现CSV或XLSX中的导出。 jqGrid没有关于数据ID的完整列表的信息或有关完整数据集的任何其他信息。您可以做的只是将window.location
设置为新网址。 url的服务器部分将生成CSV或XLSX将其返回到HTTP正文中,并将其他HTTP标头设置为Content-Type
到(“application / vnd.openxmlformats-officedocument.spreadsheetml.sheet”for XLSX,“application / vnd.ms-excel“用于XLS或”text / csv“用于CSV)和”content-disposition“用于”attachment; filename = youfilname.xslx“(另一个文件扩展名)。如果Web浏览器将数据保存在具有相应名称的文件中,并打开相应应用程序的文件(例如Excel.exe)。
答案 1 :(得分:1)
正如Oleg所说,没有内置方法可以返回未在网格中显示的页面的所有网格ID。
如果您确实需要网格中所有ID的列表,我建议您创建一个自定义Web方法来生成它们。然后,不使用网格,而是直接使用jQuery AJAX函数之一调用此方法,例如jQuery.get()
。由于在后端您已经在使用查询来为网格生成数据,因此只需调整该查询以返回ID列表 - 或者ID和相关数据(如有必要)。
但Oleg也是对的,如果你真的想要实现CSV / Excel输出,最好创建一个服务器端方法来做到这一点,因为这样你就可以通过设置HTTP来创建更好的用户体验标题正确,允许浏览器打开文件的外部应用程序等。
这有帮助吗?