ciao,
per quanto ne so io non c'è quell'evento purtroppo
devi farlo tu a mano.
La strada migliore a mio avviso è farsi renderizzare il report in un formato immagine, composta da una serie di immagini quante sono le pagine, le tipiche "tiff", per poi stampare ogni pagina di questa immagine "complessa" con l'oggetto di stampa Printdocument di .net.
Cmq sia non devi preoccuparti di creare questo tipo di immagine si arrangia il report, basta invocare il metodo "Render" con un parametro stringa di formato "Image", a questo punto hai in memoria l'immagine che è fatta dalla stampa di tutte le pagine del report.
Usando le classi System Drawing vai a fare la stampa di queste, pagina per pagina.
Tante chiacchiere di concetto, ma che si traducono in questo codice abbastanza semplice:
List<Image> pagine = new List<Image>();
int pagina = 0;
private void stampaButton_Click(object sender, EventArgs e)
{
LocalReport report = reportViewer1.LocalReport;
//---queste ci vogliono
string mimeType;
string encoding;
string fileNameExtension;
string[] streams;
Warning[] warnings;
byte[] bytes = report.Render(
"Image",
null, out mimeType,
out encoding, out fileNameExtension,
out streams, out warnings);
Image image = Image.FromStream(new MemoryStream(bytes));
FrameDimension dimension = new FrameDimension(image.FrameDimensionsList[0]);
for (int i = 0; i < image.GetFrameCount(dimension); i++)
{
image.SelectActiveFrame(dimension, i);
pagine.Add(image.Clone() as Image);
}
//string tmp = Path.ChangeExtension(Path.GetTempFileName(),".pdf");
//File.WriteAllBytes(tmp, bytes);
//Process.Start(tmp);
//--- stampa sulla stampante
PrintDocument printDoc = new PrintDocument();
printDoc.PrinterSettings.PrinterName = "#MIASTAMPANTE#";
printDoc.DocumentName = "#MIOREPORT#";
printDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage);
printDoc.Print();
}
void printDoc_PrintPage(object sender, PrintPageEventArgs e)
{
//--- generazione di ogni pagina
if (pagine.Count > pagina)
e.Graphics.DrawImage(pagine[pagina], 0, 0);
pagina++;
e.HasMorePages = pagina < pagine.Count;
}
ovviaemnte devi specificare il nome della stampante etc...
qualche esempio lo puoi trovare in rete, ti do' un paio di link utili:
www.gotreportviewer.com
http://msdn.microsoft.com/en-us/library/ms252091(VS.80).aspx
ciao.
Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo