3 Stimmen

Exportieren der Rasteransicht nach Excel in der Webanwendung

Hoffentlich könnt ihr mir weiterhelfen. Ich habe viele verschiedene Dinge versucht und kann das nicht zum Laufen bringen.

Ich habe eine Gridview wie unten in einem Update-Panel:

<asp:UpdatePanel ID="udpReport" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
      <ContentTemplate>
          <asp:GridView runat="server" ID="preferenceReportGrd" AutoGenerateColumns="false"
               AutoGenerateSelectButton="false" CaptionAlign="Top" EnableSortingAndPagingCallbacks="false" HorizontalAlign="left" CssSelectorClass="gvwPrefReport">
                   <Columns>
                       <asp:BoundField ReadOnly="true" DataField="ClientName" HeaderText="Company Name" />
                            <asp:BoundField ReadOnly="true" DataField="typeDescription" HeaderText="Preference" />
                            <asp:BoundField ReadOnly="true" DataField="defaultValue" HeaderText="Default Preference" />
                            <asp:BoundField ReadOnly="true" DataField="previousPreferenceValue" HeaderText="Previous Preference" />
                            <asp:BoundField ReadOnly="true" DataField="selectedValue" HeaderText="New Preference" />
                            <asp:BoundField ReadOnly="true" DataField="lastUpdated" HeaderText="Date Last Edited" />
                    </Columns>
          </asp:GridView>
          <div>
              <user:MsgLine runat="server" ID="MsgLine1" />
          </div>
     </ContentTemplate>
</asp:UpdatePanel>

Ich versuche, diese Rasteransicht nach Excel zu exportieren. Es gibt eine Schaltfläche, die der Benutzer klickt auf es ruft die on_click-Methode für diese Schaltfläche und in diesem on_click habe ich die folgenden:

        string attachment = "attachment; filename=Employee.xls";            
        Response.AddHeader("content-disposition", attachment);
        Response.ContentType = "application/excel";
        StringWriter stw = new StringWriter();
        HtmlTextWriter htextw = new HtmlTextWriter(stw);
        preferenceReportGrd.RenderControl(htextw);
        Response.Write(stw.ToString());
        Response.End();

Ich erhalte nichts von diesem versucht Debugging scheint es, dass, wenn ich mit der Maus über stw.tostring() alle Werte für die gridview sind da, aber nichts wird ausgeschrieben.

3voto

niranjan raj Punkte 31

Ja, im Aktualisierungspanel funktioniert der Excel-Export nicht. Ich habe das gleiche Problem. Um dieses Problem zu lösen, verwenden Sie den folgenden Code am Ende des Update-Panel-Tags

</ContentTemplate>          
       <Triggers>
        <asp:PostBackTrigger ControlID="BtnExport" />
    </Triggers>
        </asp:UpdatePanel>

es funktioniert auch innerhalb des Update-Panels

2voto

RSolberg Punkte 26515

Wenn die GridView und/oder die Schaltfläche in einem Update-Panel mit einem asynchronen Postback ist, glaube ich nicht, dass Sie die Antwort-Header oder Informationen ändern können. Versuchen Sie, es erneut mit einem vollständigen Postback auf die Schaltfläche auslösen und sehen, was passiert. Ihr Code sah nicht falsch aus, aber ich habe es nicht ausprobiert...

Werfen Sie einen Blick auf diese Beispiele...
1. c-sharpcorner
2. Matt Berseth
3. Code Projekt

1voto

Matthew Jones Punkte 24876

Überprüfen Sie Ihre Inhaltstypen und auf einen PostBackTrigger auf der Export-Schaltfläche.

Für Excel 2003

Response.ContentType = "application/vnd.ms-excel

Für Excel 2007

Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"

Sie können Sehen Sie sich diesen Blogbeitrag an für die Quelle meiner Inhaltstypen.

EDIT: Aus Ihren Kommentaren: Sie müssen einen PostBackTrigger auf das Panel setzen, das die Schaltfläche enthält, die den Export durchführt, und nicht auf das Panel, das die GridView enthält.

EDIT EDIT: Der Fehler "Datei ist nicht das, was sie sagt" ist auf eine Funktion namens "Extension Hardening" zurückzuführen, die in Excel 2007 vorhanden ist. Prüfen Sie diese StackOverflow-Frage für weitere Informationen; ich habe einen Link zu einem Blogbeitrag in dem die Gründe für diesen Fehler und eine mögliche Abhilfe beschrieben werden.

0voto

Dusty Punkte 4607

Bei einer einfachen Seite, an der ich arbeitete, konnte ich dies umgehen, indem ich eine ausgeblendete Rasteransicht außerhalb des Aktualisierungspanels einrichtete und sie mit der Rasteransicht im Aktualisierungspanel gleichsetzte, so dass sie identisch sind (mit Ausnahme der neuen ausgeblendeten Ansicht). Dann exportieren Sie dieses ausgeblendete Raster nach Excel, so wie Sie es vorher gemacht haben.

Ein Problem bei dieser Vorgehensweise ist, dass sich der Export-Hyperlink auch außerhalb des Aktualisierungsbedienfelds befinden muss, was bedeutet, dass Sie den Export-Hyperlink möglicherweise nicht dort platzieren können, wo Sie ihn haben möchten.

Zugegeben, das ist wahrscheinlich nicht der beste Weg, aber ich konnte das Problem damals so umgehen. Hoffentlich hilft es.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X