2010-11-21 14 views
1

Projemde grid görünümü satırlarını serpiştirmek için projemde görev aldım serached ve kodum vardı ve ben yaptım ama bu sınıf grid görünümünden sadece mevcut sayfayı dışa aktarıyor, böylece hepsini de dışa aktarmak istiyorum gridview satırları.export gridview satırları excel'e ulaşın

Sınıf:

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://mattberseth.com/blog/2007/04/export_gridview_to_excel_1.html Matt Berseth, pellucid olarak açıkladı. – MAC

+0

Bana gönderilen iletideki tüm kodları yaptım ancak kılavuz çizgileri kodun neresinde çizilemedim? – Myworld

cevap

1

sizin gridview o bağlı olduğu veri kaynağı önceden bulunmadığından verilere özel bir şey geçerli mi? Aksi takdirde, doğrudan gridview'in bağlı olduğu aynı veri kümesinden dışa aktarmanızı öneririm, böylelikle sayfalandırma ile uğraşmak zorunda kalmazsınız.

0

Sayfa için tam kaynak sağlamadığınız için spekülasyon yapmak zorunda kaldım, ancak sorularınızın metnini temel alarak GridView denetiminde ve GridView'da yalnızca tek verinin kullanılabilir olmasını beklediğinizden şüpheliyim. .Rows koleksiyonu geçerli sayfa olacaktır.

0

Dışa aktarmadan hemen önce, grileşme işlevinin sayfalama işlevini yanlış olarak yapın, böylece tüm satırlar istek üzerine çağrılır.