1 var tableString = '<table border="1" bordercolor="#D7D7D7">'; 2 var columns = printDatagrid.datagrid("options").columns; // 得到columns对象 3 var nameList = new Array();//定义一个数组接受columns的所有值 4 // 载入title 5 if (typeof columns != 'undefined' && columns != '') { 6 $(columns).each(function (index) { 7 tableString += '<tr>'; 8 for (var i = 0; i < columns[index].length; ++i) { 9 if (!columns[index][i].hidden) { 10 tableString += '<th'; 11 if (typeof columns[index][i].field != 'undefined' && columns[index][i].field != '') { 12 nameList.push(columns[index][i]); 13 } 14 tableString += '>' + columns[index][i].title + '</th>'; 15 } 16 } 17 tableString += '</tr>'; 18 }); 19 } 20 21 注:printDatagrid是dg的JQ对象
二、读取dg正文内容;
/ 载入内容 2 var rows = printDatagrid.datagrid("getRows"); // 这段代码是获取当前页的所有行 3 for (var i = 0; i < rows.length; ++i) { 4 tableString += '<tr>'; 5 for (var j = 0; j < nameList.length; ++j) { 6 tableString += '<td'; 7 tableString += '>'; 8 if (typeof (rows[i][nameList[j].field]) == "undefined") { 9 tableString += " " 10 } else { 11 tableString += rows[i][nameList[j].field]; 12 } 13 tableString += '</td>'; 14 } 15 tableString += '</tr>'; 16 } 17 tableString += '</table>' 复制代码
三、由于ajax的返回类型没有流类型,所以用提交form表单的形式向后台传数据,其中参数要用encodeURI( )转码,否则html标签是传不到后台的
1 var options = $("#dg").datagrid('getPager').pagination('options'); 2 var f = $('<form action="../handler/dgtoexcel.ashx" method="post" id="fm1"></form>'); 3 var i = $('<input type="hidden" id="contexts" name="contexts" />'); //主题内容 4 var pn = $('<input type="hidden" id="txtname" name="txtname" />'); //文件名 5 i.val(encodeURI(tableid)); 6 i.appendTo(f); 7 pn.val(encodeURI(options.pageNumber)); 8 pn.appendTo(f); 9 f.appendTo(document.body).submit(); 提交表单
后台就很简单了,这里就不写了。对了request获取的参数要对参数UrlEncode解码,然后输出文件流 文件名拓展名得是 .xls
PS:补充
我们在导出Excel的时候会遇到长数字会转换成科学计数法的情况!
sb.Append("<style>td{mso-number-format:"\@";}</style>");
只需要在table标签加入上述样式几即可