zoukankan      html  css  js  c++  java
  • 关于下载的问题

    昨天在做一个下载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了。

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

  • 相关阅读:
    Android LBS 学习总结
    Android LBS 百度地图(参考: 《第一行代码》第2版(郭霖)11.4 使用百度地图 )
    Android LBS 百度地图(参考: 《第一行代码》第2版(郭霖)11.3.4 显示看得懂的定位信息:准确文字地址)
    Android LBS 百度地图(参考: 《第一行代码》第2版(郭霖)11.3.2 确定自己位置的经纬度:准确数字信息)
    Android 网络编程
    Android LBS
    2018面向对象程序设计(Java)第3周学习指导及要求
    2018面向对象程序设计(Java) 第2周学习指导及要求
    2018面向对象程序设计(Java)第1周学习指导及要求
    2018年7月北航举办软件工程师师资培训札记
  • 原文地址:https://www.cnblogs.com/wonder223/p/6518595.html
Copyright © 2011-2022 走看看