2011-09-09 7 views
0

J'ai un gridview dans ma page. Ce que je veux, c'est quand l'utilisateur clique sur le bouton "Exporter", il devrait ouvrir une boîte pour télécharger un fichier et enregistrer en tant que feuille Excel. J'ai pagging activé dans ma grille, mais quand j'exporte des données, toutes les lignes doivent être envoyées dans la feuille Excel indépendamment de pagging. Je ne peux pas exporter ma source de données (datatable) parce qu'elle contient quelques autres colonnes qui sont cachées mais je l'emploie juste pour mon but et ne fais pas quoi pour le montrer aux utilisateurs. Comment puis-je le faire .... ??? Je ne reçois aucune idée ...Comment exporter GridView vers Excel?

Comme James Johnson a dit ... J'ai fait comme ça. Voici le code donné par lui

protected void btnExport_Click(object sender, EventArgs e) 
{  
    Response.Clear(); 
    Response.Buffer = true; 
    Response.ContentType = "application/vnd.ms-excel"; 
    Response.Charset = ""; 

    System.IO.StringWriter oStringWriter = new System.IO.StringWriter(); 
    System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter); 

    GridView1.RenderControl(oHtmlTextWriter);//Error is thrown from here. 

    Response.Write(oStringWriter.ToString()); 
    Response.End(); 
} 

Mais faire cela jette l'erreur suivante à partir à la potion spécifiée dans le code

Control 'ctl00_ContentPlaceHolder1_ViewAdvances1_grdAdvance' of type 'GridView' must be placed inside a form tag with runat=server. 

Je l'ai placé dans gridview usercontrol, le usercontrol est placé dans la page .aspx et cette page utilise la page maître qui a déjà une étiquette de formulaire.

Répondre

1

Vous pouvez essayer quelque chose comme ceci:

protected void btnExport_Click(object sender, EventArgs e) 
{  
    Response.Clear(); 
    Response.Buffer = true; 
    Response.ContentType = "application/vnd.ms-excel"; 
    Response.Charset = ""; 

    System.IO.StringWriter oStringWriter = new System.IO.StringWriter(); 
    System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter); 

    GridView1.RenderControl(oHtmlTextWriter); 

    Response.Write(oStringWriter.ToString()); 
    Response.End(); 
} 
+0

..votre le code affiche cette erreur "Contrôle 'ctl00_ContentPlaceHolder1_ViewAdvances1_grdAdvance' de type 'GridView' doit être placé dans une balise de formulaire avec runat = server. " mais ma grille est placée dans le contenu de la page enfant. La page maître a déjà un tag de formulaire .... –

0

Ajoutez le code suivant à votre code derrière:

Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control) 
    'dont delete - needed for excel export 
End Sub 
0

Je suis la solution pour exporter vers Excel dans la page principale.

mettre ce code après le code de chargement de la page

public override void VerifyRenderingInServerForm(Control control)<br/> 
    {<br/> 
     /* Verifies that the control is rendered */<br/> 
     //base.VerifyRenderingInServerForm(control); 
    } 

puis

protected void btnExportExcel_Click(object sender, EventArgs e)<br/> 
    {<br/> 
     try<br/> 
     {<br/> 
      BindReportdata(ddlReport.SelectedIndex);<br/> 
      Response.Clear();<br/> 
      Response.Buffer = true;<br/> 
      Response.AddHeader("content-disposition",<br/> 
      "attachment;filename=report.xls");<br/> 
      Response.ContentType = "application/ms-excel";<br/> 
      StringWriter sw = new StringWriter();<br/> 
      HtmlTextWriter hw = new HtmlTextWriter(sw);<br/> 
      for (int i = 0; i < gv_ReportData.Rows.Count; i++)<br/> 
      { 
       GridViewRow row = gv_ReportData.Rows[i];<br/> 
      } 
      gv_ReportData.GridLines = GridLines.Both;<br/> 
      gv_ReportData.RenderControl(hw);<br/> 
      Response.Write(sw.ToString());<br/> 
      Response.Flush();<br/> 
      Response.End();<br/> 
     }<br/> 
     catch (Exception ex)<br/> 
     {<br/> 
      throw ex;<br/> 
     }<br/> 
    }<br/> 


et page ASPX utilisation UpdatePanel et de déclenchement pour le bouton