该文记录了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传过来的不是空值,那么就提供下载.
posted on 2009-09-18 18:10  Evan Peng  阅读(645)  评论(0编辑  收藏  举报