2013-04-05 10 views
7

Ich habe versucht, Grid View-Daten zu Excel übertragen .... Aber die Ausgabe ist eine leere Excel-Tabelle.Wie dieses Problem zu lösen? Gibt es einen Code, um Grid View-Wert zu übertragen Excel-Blatt mit Datenbank?Gridview Datenexport zu Excel in asp.net

protected void btnexcel_Click1(object sender, EventArgs e) 
{ 
    Response.Clear(); 
    Response.Buffer = true; 
    Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls"); 
    Response.Charset = ""; 
    Response.ContentType = "application/vnd.ms-excel"; 

    StringWriter sw = new StringWriter(); 
    HtmlTextWriter hw = new HtmlTextWriter(sw); 

    gvdetails.AllowPaging = false; 
    gvdetails.DataBind(); 
    gvdetails.HeaderRow.Style.Add("background-color", "#FFFFFF"); 
    gvdetails.HeaderRow.Cells[0].Style.Add("background-color", "green"); 
    gvdetails.HeaderRow.Cells[1].Style.Add("background-color", "green"); 
    gvdetails.HeaderRow.Cells[2].Style.Add("background-color", "green"); 
    for (int i = 0; i < gvdetails.Rows.Count;i++) 
    { 
     GridViewRow row = gvdetails.Rows[i]; 
     row.BackColor = System.Drawing.Color.White; 
     row.Attributes.Add("class", "textmode"); 
     if (i % 2 != 0) 
     { 
      row.Cells[0].Style.Add("background-color", "#C2D69B"); 
      row.Cells[1].Style.Add("background-color", "#C2D69B"); 
      row.Cells[2].Style.Add("background-color", "#C2D69B"); 
     } 
    } 

    string style = @"<style> .textmode { mso-number-format:\@; } </style>"; 
    Response.Write(style); 

    Response.Output.Write(sw.ToString()); 
    Response.End(); 
} 
+1

was ist der Fehler, den Sie bekommen? – Ratna

+1

@Ratna: Excel-Tabelle, die generiert wird, ist leer. Bitte lesen Sie die Anforderung richtig. – pordi

+0

hoffe, dass Sie wissen, dass dies nicht Excel-Export ist, dienen Sie HTML-Tabelle und trick Browser mit falschen Inhaltstyp als Antwort. Es gibt zahlreiche Probleme, die Sie mit diesem Ansatz bekommen können. http://StackOverflow.com/a/10245406/351383 –

Antwort

12

Ihr Blatt haben, ist leer, da die Zeichenfolge Schriftsteller in null. Hier ist, was hier

System.Web.UI.HtmlTextWriter htmlWrite = 
    new HtmlTextWriter(stringWrite); 

    GridView1.RenderControl(htmlWrite); 

helfen kann, ist der vollständige Code

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Response.Clear(); 

    Response.AddHeader("content-disposition", "attachment; 
    filename=FileName.xls"); 


    Response.ContentType = "application/vnd.xls"; 

    System.IO.StringWriter stringWrite = new System.IO.StringWriter(); 

    System.Web.UI.HtmlTextWriter htmlWrite = 
    new HtmlTextWriter(stringWrite); 

    GridView1.RenderControl(htmlWrite); 

    Response.Write(stringWrite.ToString()); 

    Response.End(); 

} 
+1

Was ist, wenn es ein visueller Webpart ist und es keine 'Formular'-Kontrolle auf der Seite gibt? – SearchForKnowledge

-1

ich nicht da tun, ist es eine DataSource für die gridview
Obwohl Sie DataBind in Ihrem Code als

gvdetails.DataBind(); 
+0

Ich denke DataBind ist da, nur unter AllowPaging – pordi

+0

Ich spreche über 'Datenquelle'? –

+0

Scheint echt .... – pordi

0

Statt all diese tun .. kippen Sie einen einfacheren Ansatz verwenden, wie unten gezeigt.

Response.ClearContent(); 
      Response.AddHeader("content-disposition", "attachment; filename=" + strFileName); 
      Response.ContentType = "application/excel"; 
      System.IO.StringWriter sw = new System.IO.StringWriter(); 
      HtmlTextWriter htw = new HtmlTextWriter(sw); 
      gv.RenderControl(htw); 
      Response.Write(sw.ToString()); 
      Response.End(); 

Sie können den gesamten Durchlauf here

0

Etwas bekommen sonst ist zu überprüfen, stellen Sie sicher, Ansichtszustand ist (Ich löste ihn nur gestern). Wenn Sie den Viewstatus nicht aktiviert haben, bleibt die Gridview leer, bis Sie sie erneut laden.

3

möglicherweise Problem bei der Datenbindung im Export Excel. Überprüfen Sie, ob die Daten korrekt in eine Gridview passen oder nicht.

Verwenden Sie diesen Code für die Exportrasteransicht in Excel-Tabelle und beachten Sie, dass Sie iTextSharp dll in Ihrem Projekt hinzufügen müssen.

protected void btnExportExcel_Click(object sender, EventArgs e) 
    { 
     Response.Clear(); 
     Response.Buffer = true; 
     Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls"); 
     Response.Charset = ""; 
     Response.ContentType = "application/vnd.ms-excel"; 

     StringWriter sw = new StringWriter(); 
     HtmlTextWriter hw = new HtmlTextWriter(sw); 
     GridView1.AllowPaging = false; 

     // Re-Bind data to GridView 

     using (CompMSEntities1 CompObj = new CompMSEntities1()) 
     { 
      Start = Convert.ToDateTime(txtStart.Text); 
      End = Convert.ToDateTime(txtEnd.Text); 

      GridViewSummaryReportCategory.DataSource = CompObj.SP_Category_Summary(Start, End); 
      SP_Category_Summary_Result obj1 = new SP_Category_Summary_Result(); 
      GridView1.DataBind(); 
      GridView1.Visible = true; 
      ExportTable.Visible = true; 
     } 

     //Change the Header Row back to white color 

     GridView1.HeaderRow.Style.Add("background-color", "#FFFFFF"); 


     GridView1.Style.Add(" font-size", "10px"); 




     //Apply style to Individual Cells 

     GridView1.HeaderRow.Cells[0].Style.Add("background-color", "green"); 
     GGridView1.HeaderRow.Cells[1].Style.Add("background-color", "green"); 
     GridView1.HeaderRow.Cells[2].Style.Add("background-color", "green"); 
     GridView1.HeaderRow.Cells[3].Style.Add("background-color", "green"); 
     GridView1.HeaderRow.Cells[4].Style.Add("background-color", "green"); 

     for (int i = 1; i < GridView1.Rows.Count; i++) 
     { 
      GridViewRow row = GridView1.Rows[i]; 

      //Change Color back to white 

      row.BackColor = System.Drawing.Color.White; 

      //Apply text style to each Row 

     // row.Attributes.Add("class", "textmode"); 

      //Apply style to Individual Cells of Alternating Row 

      if (i % 2 != 0) 
      { 
       row.Cells[0].Style.Add("background-color", "#C2D69B"); 
       row.Cells[1].Style.Add("background-color", "#C2D69B"); 
       row.Cells[2].Style.Add("background-color", "#C2D69B"); 
       row.Cells[3].Style.Add("background-color", "#C2D69B"); 
       row.Cells[4].Style.Add("background-color", "#C2D69B"); 
      } 
     } 
     GridView1.RenderControl(hw); 

     //style to format numbers to string 

     string style = @"<style> .textmode { mso-number-format:\@; } </style>"; 

     Response.Write(style); 
     Response.Output.Write(sw.ToString()); 
     Response.Flush(); 
     Response.End(); 
    } 
3

ich denke, es wird Ihnen helfen,

string filename = String.Format("Results_{0}_{1}.xls", DateTime.Today.Month.ToString(), DateTime.Today.Year.ToString()); 
     if (!string.IsNullOrEmpty(GRIDVIEWNAME.Page.Title)) 
      filename = GRIDVIEWNAME.Page.Title + ".xls"; 

     HttpContext.Current.Response.Clear(); 

     HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + filename); 


     HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"; 
     HttpContext.Current.Response.Charset = ""; 

     System.IO.StringWriter stringWriter = new System.IO.StringWriter(); 
     System.Web.UI.HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter); 



     System.Web.UI.HtmlControls.HtmlForm form = new System.Web.UI.HtmlControls.HtmlForm(); 
     GRIDVIEWNAME.Parent.Controls.Add(form); 
     form.Controls.Add(GRIDVIEWNAME); 
     form.RenderControl(htmlWriter); 

     HttpContext.Current.Response.Write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />"); 
     HttpContext.Current.Response.Write(stringWriter.ToString()); 
     HttpContext.Current.Response.End(); 
0

Der beste Weg ist closedxml zu verwenden. Unten ist der Link als Referenz

https://closedxml.codeplex.com/wikipage?title=Adding%20DataTable%20as%20Worksheet&referringTitle=Documentation

und Sie einfache Anwendung kann hier

var wb = new ClosedXML.Excel.XLWorkbook(); 
DataTable dt = GeDataTable();//refer documentaion 

wb.Worksheets.Add(dt); 

Response.Clear(); 
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
Response.AddHeader("content-disposition", "attachment;filename=\"FileName.xlsx\""); 

using (var ms = new System.IO.MemoryStream()) { 
    wb.SaveAs(ms); 
    ms.WriteTo(Response.OutputStream); 
    ms.Close(); 
} 

Response.End();