Export GridView in Excel (arbeiten nicht)
Ich habe in den letzten zwei Tagen versuchen, einige blutige Daten nach Excel exportieren. Nach viel recherche habe ich festgestellt, dass die beste und häufigste Weg ist, mit HttpResponse
- Header, wie gezeigt in meinem code unten. Nachdem wir durch unzählige mal im debug-Modus habe ich bestätigt, dass die Daten in der Tat gibt es, und beide werden gefiltert und sortiert, wie ich es möchte. Es wird jedoch nicht als download einer Excel-Datei, oder tun Sie überhaupt etwas für diese Angelegenheit.
Vermute ich, daß dies etwas zu tun mit meiner UpdatePanel
oder vielleicht die ImageButton
Buchung nicht wieder richtig, aber ich bin mir nicht sicher. Was mache ich falsch? Bitte helfen Sie mir, um diese debug-Ausgabe. Ich werde ewig dankbar sein. Danke. 🙂
Markup
<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>
Codebehind
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Response.Clear
am Anfang.GridView.RenderControl(htmlTextWriter)
, damit die Seite wirft eine Ausnahme, dass ein Server-Steuerelement gerendert wurde außerhalb der Form. Versuchen Sie, führen Sie es im debugger, und ich bin ziemlich sicher, dass Sie sehen, dass Ausnahme.Könnten Sie vermeiden, diese Ausnahme durch überschreiben VerifyRenderingInServerForm
Sehen hier und hier.
Bearbeiten: ich habe gerade erst gesehen, dass man eine
UpdatePanel
. Stellen Sie sicher, dass Sie erstellt haben, eine (Voll-)PostBackTrigger
für die Schaltfläche:Aber statt der Erstellung einer html-Tabelle interpretiert werden kann, die von excel, würde ich eine Excel-Bibliothek, wie EPPlus(GPL), die ich wärmstens empfehlen können.
Dann ist es so einfach wie das erstellen von Excel-Dateien, die von einer DataTable und schreiben Sie die Antwort:
Hier ist ein weiteres Beispiel: http://epplus.codeplex.com/wikipage?title=WebapplicationExample
UpdatePanel
und erwähnt es in meiner Frage auch, lol. Wie kann ich erzwingen Sie eine vollständige Postbacks, wenn die Taste gedrückt wird? Ich wollte zu tun, aber keine Taste hat dieAutoPostBack
Eigenschaft. 🙁PostBackTrigger
.AutoPostBack
ist nicht notwendig, da eine Butön(oder ImageButton) automatisch Beiträge zurück.PostBackTrigger
vsAsyncPostBackTrigger
. SIE VERFLUCHEN UPDATE PANEL!!! Sie verursachen kein Ende der Probleme für mich!!!!! Argghh!!! Vielen Dank Tim, du hast mich gerettet, wieder. ^.~ (jeder, Daumen hoch, diese Antwort; es ist sicher, jemand anderem zu helfen).Meine Lösung ist folgendermaßen:
Schritt 1 (In Der Design-Seite)
SET
EnableEventValidation ="false"
im"%@ Page"
Schritt 2 (In Der Design-Seite)
Wenn es ein update-panel-fügen Sie eine Export - Taste, die, wenn geklickt wird exportieren von raster-Daten in das Excel-format
asp:PostBackTrigger
(nicht setzen Sie diese inasp:AsyncPostBackTrigger
Schritt 3 (Im Code)
Fügen Sie den folgenden:
Schritt 4 (Im Code)
Generieren, die Excel-Inhalt:
Klicken auf die Schaltfläche "exportieren" wird nun laden Sie eine Excel-Dokument.