我花了最近兩天試圖獲得一些血腥的數據導出到Excel。經過大量研究,我確定最好和最常用的方法是使用HttpResponse
標題,如下面的代碼所示。在調試模式下經歷了無數次之後,我已經確認數據實際上存在並且按照我想要的方式進行過濾和排序。但是,它不會以Excel文件的形式下載,也不會爲此做任何事情。將GridView導出到Excel(不工作)
我懷疑這可能與我的UpdatePanel
或ImageButton
回覆不正確,但我不確定。我究竟做錯了什麼?請幫我調試這個問題。我會永遠感激。謝謝。 :)
標記
<asp:UpdatePanel ID="statusUpdatePanel" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnExportXLS" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" PageSize="10"
AllowSorting="True" DataSourceID="GridView1SDS" DataKeyNames="ID">
</asp:GridView>
<span><asp:ImageButton ID="btnExportXLS" runat="server" /></span>
</ContentTemplate>
</asp:UpdatePanel>
代碼隱藏
Protected Sub ExportToExcel() Handles btnExportXLS.Click
Dim dt As New DataTable()
Dim da As New SqlDataAdapter(SelectCommand, ConnectionString)
da.Fill(dt)
Dim gv As New GridView()
gv.DataSource = dt
gv.DataBind()
Dim sw As New IO.StringWriter()
Dim hw As New System.Web.UI.HtmlTextWriter(sw)
Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader("content-disposition", "attachment;filename=Report.xls")
Response.Charset = String.Empty
gv.RenderControl(hw)
Response.Write(sw.ToString()) 'sw is a valid html table, but no Excel file downloads. :(
Response.End()
End Sub
嗨蒂姆,我已經嘗試過1&2以及,但仍然沒有。我也加入了調試和沒有錯誤,或者他們正在被吞噬。這讓我瘋狂。這不應該是這麼難。 :(感謝圖書館的提示,如果我仍然無法完成這項工作,我會試一試,但如果可以避免的話,我真的不想再學習另一個圖書館或插件。 – Chiramisu
是的,這就是爲什麼我發佈了我的標記來顯示'UpdatePanel',並在我的問題中提到它,lol。當按下按鈕時,我怎麼強制完整回發?我想這樣做,但沒有按鈕具有'AutoPostBack'屬性。 :( – Chiramisu
我已經展示瞭如何使用'PostBackTrigger'來強制下載按鈕的完整回發。由於一個buton(或ImageButton)會自動回傳,因此不需要AutoPostBack。 –