报表导出模块实现
表格导出的方法至少有三种,第一种是利用excel支持html,直接利用控件的rendercontrol()方法,将控件的html代码以excel类型输出到客户端;第二种利用excel的com接口库来完成;第三种利用数据访问对象来操作excel文件,以达到导出excel的效果。
以下是第一種的方法。
[csharp]
//表格输出
public void report(system.web.ui.pagepage,repeater rpt,string title,string type)
{
//清除缓冲区内的所有内容输出
httpcontext.current.response.clear(参数){……};
//设置输出流的http字符
httpcontext.current.response.charset ="uft-8";
//将http头添加到输出流
httpcontext.current.response.addheader("content-disposition",
"attachment;filename="+httputility.urlencode(datetime.now.tostring("yyyymmddhhmmss")+ ".xls",encodin g.utf8).tostring(参数){……});
//设置输出流的httpmime类型
httpcontext.current.response.contenttype ="application/ms-excel";
//设置当前页请求结束时该页是否保持其视图状态以及它包含的任何服务器控件的视图状态
page.enableviewstate = false;
system.io.stringwriterostringwriter = new system.io.stringwriter(参数){……};
system.web.ui.htmltextwriter ohtmltextwriter=
new system.web.ui.htmltextwriter(ostringwriter);
//将服务器控件的内容输出到提供的htmltextwriter对象中
rpt.rendercontrol(ohtmltextwriter);
//将信息写入到http响应输出流
httpcontext.current.response.write("<html><head><metahttp-equiv=content-type content=\"text/html;cha rset=utf-8\"></head><body><table><b>"+标题 +"</b></td></tr></table><table>"+"<thead>表头</thead><tbody>");
string temp = ostringwriter.tostring(参数){……};
httpcontext.current.response.write(temp);
httpcontext.current.response.write("</tbody></table></body></html>");
//输出到客户端
httpcontext.current.response.end(){……};
}
前台.net页面中涉及的html:
<table><thead>表头</thead><tbody>repeater控件</tbody></table>
摘自 chenpeggy