关于下载的问题

昨天在做一个下载excel的需求,发现有些需要说明的地方。

首先来个二话不说上代码:

Response.Clear();
            Response.BufferOutput = true;
            string fileName = "123.xls";
            //设定输出的字符集 
            Response.Charset = "GB2312";
            //假定导出的文件名为FileName.xls 
            Response.AppendHeader("Content-Disposition", "attachment;filename= " + fileName);
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
            //设置导出文件的格式 
            Response.ContentType = "application/ms-excel";
            //关闭ViewState 
            EnableViewState = false;
            System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("ZH-CN", true);
            System.IO.StringWriter stringWriter = new System.IO.StringWriter(cultureInfo);
            System.Web.UI.HtmlTextWriter textWriter = new System.Web.UI.HtmlTextWriter(stringWriter);

            //DataTable dt = new DataTable();

            //DataGrid excel = new DataGrid();
            //excel.DataSource = dt.DefaultView;
            //excel.DataBind();
            //excel.RenderControl(textWriter);

            textWriter.Write("<table><tr><th>1.1</th><th>1.2</th><th>1.3</th><th>1.4<th></tr>");
            textWriter.Write("<tr><td>2.1</td><td>2.2</td><td>2.3</td><td>2.4</td></tr>");
            textWriter.Write("<tr><td>3.1</td><td><table><th>3.2.1</th><td>3.2.2</td></tr>"+
                "<tr><td>3.2.3</td><td>3.2.4</td></tr></table></td><td>3.3</td><td>"+
                "<table><tr><td>1.1</td><td>1.2</td></tr><tr><td>2.1</td><td>2.2</td></tr><tr><td>2.1</td><td>2.2</td></tr></table>"
                + "</td></tr></table>");

            //把HTML写回浏览器
            //解决第一位字符为零时不显示的问题和条码被认定为数字问题。
            Response.Write("<head><style>table td,th{text-align: center;} table th{color:red;background-color:blue}</style></head>");
            Response.Write(stringWriter.ToString());
            Response.End();

大家可以看到,这个里面有2个点:

    1)只要你正确地组织正确的HTML table元素,excel就可以自动给你表中套表,强大到令人无话可说了。

    2)可以使用css设定Excel中格子的样式。

 

再来说说我遇到的坑,我在自己机器上新建的测试很快乐地测试下载excel,可是将这个代码Copy到大工程中,怎么就“System.WebForms.PageRequestManagerParserErrorException:

The message received from the server could not be parsed.Commond causes for this error are when the response is modified by calls to Response.Write(),

response filters,HttpModules ,or server traceis enabled. Details: Error parsing near '<head><style>table t'.".

首先是怀疑自己的程序,再在本机测试,还是正确的,放到大工程中,还是出错。

将中间输出的部分,改简单点,不行。将“<head>"标签去掉,不行。改语言,还是不行。

专业的程序员是还的baidu er,将使用baidu去搜索,发现有个文章说到"如果调用Response.Write()方法的服务器控件在使用UpdatePanel的页面,则只需要在UpdatePanel下增加一个<Triggers>节点,通过PostBackTrigger注册一下改控件就可以了."

下面还有说明具体怎么做,也就是将控件ID放到asp:PostBackTrigger中去   <asp:PostBackTrigger ControlID="Button2" /> <!--Button2就是下面那个需要在Button2_Click事件里使用Response.Write()的按钮ID-->  </Triggers>  就OK了。

按照他指导的方法做了一下,果然就出来了。 

 

转载于:https://www.cnblogs.com/wonder223/p/6518595.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值