關於下載的問題

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

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章