Report Viewer, report locali, render diretto
Il controllo report viewer, come ho già scritto qui, consente la visualizzazione di report, in modalità locale, prelevando dati da un proprio oggetto.
La domanda potrebbe nascere spontanea: visto che il controllo mi permette il salvataggio in formato excel e/o pdf, ho modo di ottenere direttamente il report in uno di questi formati senza passare dal visualizzatore (ovvero senza che sia l’utente a dover scegliere il save)?
Si, tramite l’oggetto LocalReport ed il suo metodo Render.
Ovvero scrivendo qualcosa come:
string reportPath = @"C:\cartellaReport\mioReport.rdlc";
var report = new LocalReport();
report.ReportPath = reportPath;
Warning[] warnings;
string[] streamids;
string mimeType;
string encoding;
string filenameExtension;
byte[] bytes = report.Render("PDF", null, out mimeType, out encoding, out filenameExtension, out streamids, out warnings);
salvaReport(bytes);
Dove il metodo “salvaReport” va, semplicemente, a scrivere lo stream di byte su file:
private void salvaReport(byte[] reportStream)
{
var stream = File.Create(@"c:\temp\____report.pdf");
stream.Write(reportStream, 0, reportStream.Length);
stream.Close();
}