DataTable数据导出至Excel

      该文记录了asp.net里头如何将DataTable中的数据导出为Excel表格,这里的做法是通过一个iframe指向下载页,当选择导出时,将DataTable数据以Session的方式传给iframe指向的下载页面,然后原页面只要刷新该iframe即可.下面就以实例说明
      假定有两个页面data.aspx和download.aspx
      1.添加iframe至data.aspx页面,该iframe默认不指向任何页面                  
< iframe  id ="downPage"  height ="0px"  width ="0px"  frameborder ="0"  src ="" ></ iframe >
      2.data.aspx有个触发下载的服务器端按钮,下面是该按钮事件:
Session[ " ExportTable " =  dtNewSource;                           
Page.ClientScript.RegisterStartupScript(GetType(), 
"" " <script>RefIframe();</script> " );
         注:dtNewSource为需要导出的数据源,为DataTable类型
      3.需要一个刷新ifame的javascript方法提供给下载按钮调用
< script type = " text/javascript " >
    
function  RefIframe() {
        document.getElementsByTagName(
" iframe " )[ 0 ].src  =   " /ContactsManage/Pages/exportData.aspx " ;        
    }
< / script>
      4.当按钮事件被触发后,download.aspx页面需要接收数据
protected   void  Page_Load( object  sender, EventArgs e)
{
    
if  ( ! IsPostBack)
    {
        
if  (Session[ " ExportTable " !=   null )
        {
            DataTable dataList 
=  Session[ " ExportTable " as  DataTable;
            ExportExcel(
" 联系人详细信息 " , dataList); 
        }
    }
}
      5.上面的方法中有调用到一个名为ExportExcel的方法,这就是导出数据的核心方法了,代码如下:
public   void  ExportExcel( string  fileName, DataTable dataSource)
{
    System.Web.UI.WebControls.GridView dgExport 
=   null ;
    
// 当前对话 
     System.Web.HttpContext curContext  =  System.Web.HttpContext.Current;
    
// IO用于导出并返回excel文件 
     System.IO.StringWriter strWriter  =   null ;
    System.Web.UI.HtmlTextWriter htmlWriter 
=   null ;

    
if  (dataSource  !=   null )
    {
       
// 设置编码和附件格式 
        curContext.Response.Clear();
       curContext.Response.Buffer 
=   true ;
       
// System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8)作用是方式中文文件名乱码
        curContext.Response.AddHeader( " content-disposition " " attachment;filename= "   +  System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)  +   " .xls " );                
       curContext.Response.ContentType 
=   " application/vnd.ms-excel " ;
       
// 解决输出的内容为乱码问题
        curContext.Response.Write( " <meta http-equiv=Content-Type content=text/html;charset=UTF-8> " );                

       
// 导出Excel文件 
        strWriter  =   new  System.IO.StringWriter();
       htmlWriter 
=   new  System.Web.UI.HtmlTextWriter(strWriter);

       
// 为了解决dgData中可能进行了分页的情况,需要重新定义一个无分页的GridView 
       dgExport  =   new  System.Web.UI.WebControls.GridView();
       dgExport.DataSource 
=  dataSource;
       dgExport.AllowPaging 
=   false ;
       dgExport.DataBind();

       
// 下载到客户端 
        dgExport.RenderControl(htmlWriter);
       curContext.Response.Write(strWriter.ToString());
       curContext.Response.End();
   }
}
需要说明一点的是download.aspx是一个空页面,只不过这个页面载入时如果data.aspx传过来的不是空值,那么就提供下载.

转载于:https://www.cnblogs.com/py891021/archive/2009/09/18/1569620.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值