在过去的两天里,我一直在尝试将一些血腥的数据导出到 Excel。经过大量研究,我确定最好和最常见的方法是使用HttpResponse
标题,如下面的代码所示。在调试模式下经历无数次之后,我确认数据确实存在,并且按照我想要的方式过滤和排序。但是,它不会作为 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