一、背景说明
之前导出excel一般使用DataTable作为数据库,但是DataTable和Repeater绑定后,会做一些格式转换(如:dt里面为1的值 Repeater中显示 “正常”),如果在DataTable中再进行转换就比较麻烦。(好处就是可以导出分页数据)
二、解决方法
1、解决的问题
a) Repeater数据原样导出
b) 可导出Repeater中的分页数据
2、代码
DataTable dt = ViewState["DtDatat"] as DataTable;
this.Repeater1.DataSource = dt;
this.Repeater1.DataBind();
//使用流方式导出Excel
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
HttpContext.Current.Response.ContentType = "application/ms-excel";
HttpContext.Current.Response.Charset = "gb2312";
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode("门店奖品兑换.xls", System.Text.Encoding.UTF8).ToString());
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
Repeater1.RenderControl(htw);
HttpContext.Current.Response.Write(sw.ToString());
HttpContext.Current.Response.End();
三 、代码说明
1、如果要导出分页数据,那么就需要把Repeater绑定的DataTable数据存放在ViewState中,触发导出事件时使用DataTable重新绑定Repeater
DataTable dt = ViewState["DtDatat"] as DataTable;
this.Repeater1.DataSource = dt;
this.Repeater1.DataBind();
2、使用流方式导出
四、会出现问题的解决方法
1、导出的Excel都是Html代码
所有的html代码应该放在Repeater内,包括<table>
2、导出的所有数据缩到一列
在标题列中不要通过style=width:10% 设置宽度