国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

Asp.net導(dǎo)出Excel文件

2019-11-17 02:02:47
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

asp.net導(dǎo)出Excel文件

參考了網(wǎng)上其他大神的寫法,也是利用控件的RenderControl功能,得到該控件生成的HTML,然后以Excel文件的類型輸出到客戶端。

不同的地方是我自己添加了Response.Flush()方法,這樣在生成數(shù)據(jù)的時(shí)候就已經(jīng)彈出了下載框,而不必在同樣的頁(yè)面等待一會(huì)兒。如圖:

點(diǎn)擊導(dǎo)出Excel按鈕后,直接彈出下載框。

注:Response.Flush()的作用是將緩沖信息輸出到頁(yè)面。

    /// <summary>    /// 把DataTable內(nèi)容導(dǎo)出excel并返回客戶端     /// </summary>    /// <param name="header">標(biāo)題行</param>    /// <param name="fileName">文件名稱</param>    public void DataTable2Excel(TableCell[] header, string fileName)    {       // IO用于導(dǎo)出并返回excel文件        var strWriter = new StringWriter();       var htmlWriter = new HtmlTextWriter(strWriter);       // 設(shè)置編碼和附件格式        Response.ContentType = "application/ms-excel";       Response.ContentEncoding = Encoding.GetEncoding("gb2312");       Response.Charset = "gb2312";       if (!string.IsNullOrEmpty(fileName))       {           fileName = HttpUtility.UrlEncode(fileName, Encoding.UTF8);//處理中文名亂碼問(wèn)題           Response.AppendHeader("Content-Disposition", ("attachment;filename=" + (fileName.ToLower().EndsWith(".xls") ? fileName : fileName + ".xls")));       }       Response.Flush();       var gvExport = new GridView();// 重新定義一個(gè)無(wú)分頁(yè)的GridView var dt = new DataTable();//這里是要導(dǎo)出的數(shù)據(jù)       gvExport.DataSource = dt.DefaultView;       gvExport.AllowPaging = false;       gvExport.RowDataBound += dgExport_RowDataBound; //優(yōu)化導(dǎo)出數(shù)據(jù)顯示,如身份證、12-1等顯示異常問(wèn)題       gvExport.DataBind();       if (header != null && header.Length > 0)//處理表頭       {            gvExport.HeaderRow.Cells.Clear();            gvExport.HeaderRow.Cells.AddRange(header);       }       gvExport.RenderControl(htmlWriter);// 返回客戶端        Response.Write(strWriter);       Response.End();    }

    /// <summary>    /// 用來(lái)優(yōu)化導(dǎo)出數(shù)據(jù)顯示    /// </summary>    /// <param name="sender"></param>    /// <param name="e"></param>    PRotected void dgExport_RowDataBound(object sender, GridViewRowEventArgs e)    {        if (e.Row.RowType != DataControlRowType.DataRow) return;        foreach (var cell in e.Row.Cells.Cast<TableCell>().Where(cell => Regex.IsMatch(cell.Text.Trim(), @"^/d{12,}$") || Regex.IsMatch(cell.Text.Trim(), @"^/d+[-]/d+$")))        {            cell.Attributes.Add("style", "vnd.ms-excel.numberformat:@");        }    }

總結(jié):

1、方法調(diào)用時(shí)總會(huì)報(bào)錯(cuò):Server cannot set content type after HTTP headers have been sent.

  原因:在 Response.AppendHeader 方法調(diào)用之前,先調(diào)用了Response.Flush()方法。

2、報(bào)錯(cuò):必須放在具有 runat=server 的窗體標(biāo)記內(nèi).

解決辦法:public override void VerifyRenderingInServerForm(Control control){} //不需要添加內(nèi)容


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 汉阴县| 鹰潭市| 延吉市| 德庆县| 阳春市| 巫山县| 威信县| 安西县| 清镇市| 临澧县| 特克斯县| 西吉县| 遂昌县| 灯塔市| 翁牛特旗| 抚顺县| 巫山县| 泸水县| 海丰县| 景洪市| 武威市| 龙南县| 耿马| 眉山市| 大冶市| 高阳县| 永仁县| 铜川市| 榆林市| 四平市| 乌拉特后旗| 常山县| 西藏| 卢氏县| 海兴县| 江都市| 玉山县| 浏阳市| 清新县| 炉霍县| 海晏县|