過去 2 日間、血まみれのデータを取得して 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