Chi*_*isu 0 vb.net asp.net gridview updatepanel export-to-excel
我花了最近两天试图将一些血腥数据导出到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>
Run Code Online (Sandbox Code Playgroud)
代码隐藏
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
Run Code Online (Sandbox Code Playgroud)
Response.Clear在开始的时候错过了一个.GridView.RenderControl(htmlTextWriter),因此该页面引发了一个异常,即Server-Control是在Form外部呈现的.尝试在调试器中执行它,我很确定你会看到该异常.您可以通过重写VerifyRenderingInServerForm来避免此异常
Public Overrides Sub VerifyRenderingInServerForm(control As Control)
' Confirms that an HtmlForm control is rendered for the specified ASP.NET '
' server control at run time. '
End Sub
Run Code Online (Sandbox Code Playgroud)
编辑:我刚刚看到你正在使用一个UpdatePanel.确保您已PostBackTrigger为该按钮创建了(完整):
<asp:UpdatePanel ID="UpdGridInfo" runat="server" >
<ContentTemplate>
<asp:ImageButton ToolTip="export to Excel" ID="BtnExcelExport" ImageUrl="~/images/excel2007logo.png" runat="server" />
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="BtnExcelExport" />
</Triggers>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)
但是我没有创建一个可以由excel解释的html表,而是使用像EPPlus(GPL)这样的Excel库,我可以热烈推荐.
然后,从DataTable创建Excel文件并将其写入响应就像这样容易:
Dim pck = New ExcelPackage()
Dim ws = pck.Workbook.Worksheets.Add("Worksheet-Name")
ws.Cells("A1").LoadFromDataTable(dt, True, OfficeOpenXml.Table.TableStyles.Medium1)
Response.Clear()
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Response.AddHeader("content-disposition", "attachment; filename=ExcelFileName.xlsx")
Response.BinaryWrite(pck.GetAsByteArray())
Response.End()
Run Code Online (Sandbox Code Playgroud)
这是另一个例子:http://epplus.codeplex.com/wikipage?title = WebapplicationExample
| 归档时间: |
|
| 查看次数: |
13957 次 |
| 最近记录: |