2010-11-21 12 views
1

Ich hatte Aufgabe in meinem Projekt, Rasteransicht Zeilen zu excel Blatt exportieren Ich serached und ich hatte Code und ich habe es getan, aber diese Klasse exportieren nur aktuelle Seite aus Rasteransicht, so will ich auch alle zu exportieren Gridview-Zeilen.export gridview Zeilen zu Excel Blatt

Klasse:

using System; 
using System.Data; 
using System.Configuration; 
using System.IO; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 

/// <summary> 
/// 
/// </summary> 
public class GridViewExportUtil 
{ 
    /// <summary> 
    /// 
    /// </summary> 
    /// <param name="fileName"></param> 
    /// <param name="gv"></param> 
    public static void Export(string fileName, GridView gv) 
    { 
     HttpContext.Current.Response.Clear(); 
     HttpContext.Current.Response.AddHeader(
      "content-disposition", string.Format("attachment; filename={0}", fileName)); 
     HttpContext.Current.Response.ContentType = "application/ms-excel"; 

    using (StringWriter sw = new StringWriter()) 
    { 
     using (HtmlTextWriter htw = new HtmlTextWriter(sw)) 
     { 
      // Create a form to contain the grid 
      Table table = new Table(); 

      // add the header row to the table 
      if (gv.HeaderRow != null) 
      { 
       GridViewExportUtil.PrepareControlForExport(gv.HeaderRow); 
       table.Rows.Add(gv.HeaderRow); 
      } 

      // add each of the data rows to the table 
      foreach (GridViewRow row in gv.Rows) 
      { 
       GridViewExportUtil.PrepareControlForExport(row); 
       table.Rows.Add(row); 
      } 

      // add the footer row to the table 
      if (gv.FooterRow != null) 
      { 
       GridViewExportUtil.PrepareControlForExport(gv.FooterRow); 
       table.Rows.Add(gv.FooterRow); 
      } 

      // render the table into the htmlwriter 
      table.RenderControl(htw); 

      // render the htmlwriter into the response 
      HttpContext.Current.Response.Write(sw.ToString()); 
      HttpContext.Current.Response.End(); 
     } 
    } 
} 

/// <summary> 
/// Replace any of the contained controls with literals 
/// </summary> 
/// <param name="control"></param> 
private static void PrepareControlForExport(Control control) 
{ 
    for (int i = 0; i < control.Controls.Count; i++) 
    { 
     Control current = control.Controls[i]; 
     if (current is LinkButton) 
     { 
      control.Controls.Remove(current); 
      control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text)); 
     } 
     else if (current is ImageButton) 
     { 
      control.Controls.Remove(current); 
      control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText)); 
     } 
     else if (current is HyperLink) 
     { 
      control.Controls.Remove(current); 
      control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text)); 
     } 
     else if (current is DropDownList) 
     { 
      control.Controls.Remove(current); 
      control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text)); 
     } 
     else if (current is CheckBox) 
     { 
      control.Controls.Remove(current); 
      control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False")); 
     } 

     if (current.HasControls()) 
     { 
      GridViewExportUtil.PrepareControlForExport(current); 
     } 
    } 
} 
} 

CS:

protected void imgbtn_export_Click(object sender, ImageClickEventArgs e) 
    { 
     GridViewExportUtil.Export("Problems.xls", this.GridView1); 
    } 
+0

[1]: http://mattbertseth.com/blog/2007/04/export_gridview_to_excel_1.html Matt Berseth erklärt wie pellucid Art und Weise. – MAC

+0

Ich habe den gesamten Code in dem Link, den Sie mir gesendet haben, aber ich habe nicht die Rasterlinien zu Raster, wo der Code? – Myworld

Antwort

1

Hat Ihr gridview etwas gelten besondere auf die Daten, die nicht bereits in der Datenquelle ist, dass es gebunden ist? Wenn nicht, würde ich vorschlagen, dass Sie direkt aus demselben Dataset exportieren, mit dem die Gridview verbunden ist, wodurch vermieden wird, dass Sie sich mit der Paginierung befassen müssen.

0

Sie haben nicht die vollständige Quelle für die Seite angegeben, so dass ich spekulieren müsste, aber basierend auf dem Wortlaut Ihrer Frage vermute ich, dass Sie das Paging innerhalb des GridView-Steuerelements aktiviert haben und daher die einzigen in GridView verfügbaren Daten sind .Rows-Sammlung wird die aktuelle Seite sein.

0

Kurz vor dem Exportieren die Paging-Funktion der Gridview als false festlegen, so dass alle Zeilen bei Bedarf aufgerufen werden.