Il suffit pour cela de mettre la propriété “ShowExportControls” à True.
Voilà ce qui apparait dans la toolbar du ReportViewer.
Mais dans ce cas, où l’on a qu’un seul type d’export (ici PDF), l’utilisateur ne comprend pas pourquoi il devrait choisir vu qu’il n’y a qu’un type.
Donc dans ce qui suit, je vais rapidement exposer comment faire pour rajouter un linkButton qui permettra le téléchargement du PDF.
Tout d’abord, pour faire simple, je créé une méthode permettant de rechercher le reportViewer contenu dans un control
[sourcecode language='c-sharp']
public static ReportViewer GetReportViewerFromControl(Control ctrl)
{
// récupere le ContentPlaceHolder1
return Xtr.ToolBox.WebUiExtensions.ControlsAvecRecursivite(ctrl)
.OfType
.FirstOrDefault();
}
[/sourcecode]
Pour récupérer le premier reportViewer d’un control, j’utilise la méthode de Jérémy ( ControlsAvecRecursivite)
Dans le OnLoad de ma page je vais donc cacher le groupe Export et ajouter mon bouton d’export
[sourcecode language='c-sharp']
ReportViewer rv = GetReportViewerFromControl(this);
if (rv != null)
{
//la liste déroulante du format d'export
rv.ShowExportControls = false;
//Ajoute le bouton d'export PDF
AddExportButtonToReportToolbar(rv);
}
[/sourcecode]
Dans mon cas, j’ai décidé d’ajouter mon bouton d’exportation dans le groupe d’impression.
Je passe donc le reportViewer en argument de ma méthode et celle-ci, cherchera le groupe d’impression et y ajoutera mon bouton.
[sourcecode language='c-sharp']
private void AddExportButtonToReportToolbar(ReportViewer rv)
{
if (rv != null)
{
foreach (Control c in rv.Controls)
{
//recherche de la toolbar
if (c.ToString() == "Microsoft.Reporting.WebForms.ToolbarControl")
{
foreach (Control ssc in c.Controls)
{
//on l'ajoute dans le groupe de l'impression
if (ssc.ToString() == "Microsoft.Reporting.WebForms.PrintGroup")
{
LinkButton lkButton = new LinkButton();
lkButton.ID = "lkButtonExportPDF";
lkButton.CausesValidation = false;
lkButton.Text = "Exporter en PDF";
lkButton.Click+=new EventHandler(lkButton_Click);
lkButton.ToolTip = "Export PDF";
ssc.Controls.Add(lkButton);
}
}
}
}
}
}
[/sourcecode]
La dernière étape consiste donc à gérer l’évenement click de mon bouton qui permettra l’ouverture du rapport exporté au format PDF
[sourcecode language='c-sharp']
private void lkButton_Click(object sender, EventArgs e)
{
ReportViewer rv = HelperBase.GetReportViewerFromControl(this);
if (rv != null)
{
Warning[] warnings = null;
string[] streamids = null;
string mimeType = string.Empty;
string encoding = string.Empty;
string extension = string.Empty;
Byte[] bytes = rv.LocalReport.Render("PDF", string.Empty, out mimeType, out encoding, out extension, out streamids, out warnings);
Response.ContentType = "Application/pdf";
Response.AddHeader("Content-Disposition", "attachment; filename=export.pdf");
Response.AddHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
Response.AddHeader("Pragma", "no-cache");
Response.AddHeader("Expires", "0");
Response.OutputStream.Write(bytes, 0, bytes.Length);
Response.Flush();
}
}
[/sourcecode]
Le résultat est le suivant :
Le code est assez simple et certainement pas optimisé mais il permet une première approche dans l’ajout de fonctionnalités à la toolbar des reportViewer.
Aucun commentaire:
Enregistrer un commentaire