原样导出Repeater控件数据(包括分页数据)

一、背景说明

之前导出excel一般使用DataTable作为数据库,但是DataTableRepeater绑定后,会做一些格式转换(如: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=10% 设置宽度 

原文地址:https://www.cnblogs.com/gossip/p/1978072.html