Voici la disposition, j'ai un contrôle FormView avec des données dynamiques provenant d'un serveur SQL. J'utilise le mode ReadOnly de FormView. Comment puis-je modifier la méthode PrepareFormViewForExport pour supprimer les zones de texte et laisser les valeurs dans FormView derrière? À l'heure actuelle, la sortie affiche des étiquettes mais ignore les valeurs des zones de texte.FormView to Excel - Comment extraire les données des contrôles dans un modèle pour les placer dans des cellules
Il s'agit du code C# lorsque vous cliquez sur le bouton d'exportation.
protected void Bexport_Click(object sender, EventArgs e)
{
//Clear the Response object
Response.Clear();
//set Response header to the Excel filename required (.xls for excel, .doc for word)
Response.AddHeader("content-disposition", "attachment;filename=ReportOuput.xls");
Response.Charset = "";
// If you want the option to open the Excel
// file without the save option then un-comment out the line below
//Response.Cache.SetCacheability(HttpCacheability.NoCache);
//FOR EXCEL
Response.ContentType = "application/vnd.xls";
//FOR WORD
//Response.ContentType = "application/vnd.doc";
//Declare new stringwriter and html writer
StringWriter stringWrite = new System.IO.StringWriter();
HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
//Strip out controls from FormView ?takes data too?
PrepareFormViewForExport(FormView2);
//render controls data as HTML
FormView2.RenderControl(htmlWrite);
//Clean out the Javascript postbacks etc.
string html = stringWrite.ToString();
html = Regex.Replace(html, "</?(a|A).*?>", "");
StringReader reader = new StringReader(html);
//Write xls document
Response.Write(html);
//end current Response
HttpContext.Current.Response.End();
}
Voici la méthode permettant de supprimer des contrôles de FormView avant de les exporter.
private void PrepareFormViewForExport(Control fv)
{
LinkButton lb = new LinkButton();
Literal l = new Literal();
string name = String.Empty;
TextBox TB = new TextBox();
for (int i = 0; i < fv.Controls.Count; i++)
{
if (fv.Controls[i].GetType() == typeof(LinkButton))
{
l.Text = (fv.Controls[i] as LinkButton).Text;
fv.Controls.Remove(fv.Controls[i]);
fv.Controls.AddAt(i, l);
}
else if (fv.Controls[i].GetType() == typeof(TextBox))
{
l.Text = (fv.Controls[i] as TextBox).Text;
fv.Controls.Remove(fv.Controls[i]);
fv.Controls.AddAt(i, l);
}
else if (fv.Controls[i].GetType() == typeof(DropDownList))
{
l.Text = (fv.Controls[i] as DropDownList).SelectedItem.Text;
fv.Controls.Remove(fv.Controls[i]);
fv.Controls.AddAt(i, l);
}
else if (fv.Controls[i].GetType() == typeof(CheckBox))
{
l.Text = (fv.Controls[i] as CheckBox).Checked ? "True" : "False";
fv.Controls.Remove(fv.Controls[i]);
fv.Controls.AddAt(i, l);
}
if (fv.Controls[i].HasControls())
{
PrepareFormViewForExport(fv.Controls[i]);
}
}
}
qui a l'air génial, mais pour 999 $ est hors de mon budget de 0 $. Merci d'avoir répondu! –