Come da oggetto...la domanda è: Come si fa a mandare una stampa senza utilizzare i report???
Banalmente senza aprire il report! Prima di tutto: Crystal Report o Data Report?
mi è stato chiesto di utilizzare l'oggetto print di .net
ma cosa devi stamapre? i contenuto di un form o un report?
devo stampare quello che attualmente è il contenuto di un datagridview
mi è stato detto di usare l'oggetto print di .net ma credo si riferissero all'oggetto PrintDocument
Concordo sul PrintDocument, ecco un esempio:
http://www.codeproject.com/KB/printing/simpleprintingcs.aspx
Anche se penso che hai poche possibilità di formattazione del risultato...
non è che sia chiarissimo questo esempio...nel senso che : ho provato il codice...ma non compila nemmeno xD
Puoi banalmente leggere la documentazione ufficiale:
http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.print.aspx
Se hai ancora bisogno , posso darti una mano , lo ho utilizzato molte volte nelle mie applicazioni.
Andrea Romeo
no anzi ti ringrazio ho risolto ed inserisco i punti chiave della soluzione che ho adottato così da aiutare qualcuno con lo stesso problema e magari avere consigli su possibili soluzioni migliori:
.....
using System.Drawing.Printing;
a livello di classe
private int numPage = 1; private int numRow = 0;
nell'evento click del button che lancia la stampa
private void printDoc_PrintPage(object sender, PrintPageEventArgs ev) { Font printFont = new Font("Times new roman", 9); Font titleFont = new Font("Times new roman", 20); float linesPerPage = 0; float yPos = 0; int count = 0; //recupero margine sinistro e alto del documento float leftMargin = ev.MarginBounds.Left; float topMargin = ev.MarginBounds.Top; //calcola il numero di righe per pagina linesPerPage = ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics); //Controllo se è la prima riga del documento che stampo in modo da scriverci un titolo if (numRow == 0) { ev.Graphics.DrawString("Elenco Clienti", titleFont, Brushes.Black, leftMargin, yPos, new StringFormat ()); }
//stampa tutte le righe del datagridview while ((count < linesPerPage) && (numRow < DataGridView.Rows.Count)) { //controllo se è la prima riga della pagina in modo da avere gli header delle colonne ripetuti per ogni pagina if (count == 0) { yPos = topMargin + (count * printFont.GetHeight(ev.Graphics)); ev.Graphics.DrawString("cella 1", printFont, Brushes.Black, leftMargin, yPos, new StringFormat()); ev.Graphics.DrawString("cella 2", printFont, Brushes.Black, leftMargin + 80, yPos, new StringFormat()); ev.Graphics.DrawString("cella 3", printFont, Brushes.Black, leftMargin + 140, yPos, new StringFormat()); ev.Graphics.DrawString("cella 4", printFont, Brushes.Black, leftMargin + 160, yPos, new StringFormat()); ev.Graphics.DrawString("cella 5",printFont, Brushes.Black, leftMargin + 285, yPos, new StringFormat()); ev.Graphics.DrawString("cella 6", printFont, Brushes.Black, leftMargin + 575, yPos, new StringFormat()); } yPos = topMargin + ((count+1) * printFont.GetHeight(ev.Graphics)); numRow++; DataGridViewRow riga = clientiDataGridView1.Rows[numRow-1*numPage]; ev.Graphics.DrawString(riga.Cells[0].Value.ToString(), printFont, Brushes.Black, leftMargin, yPos, new StringFormat()); ev.Graphics.DrawString(riga.Cells[1].Value.ToString(), printFont, Brushes.Black, leftMargin + 80, yPos, new StringFormat()); ev.Graphics.DrawString(riga.Cells[2].Value.ToString(), printFont, Brushes.Black, leftMargin + 140, yPos, new StringFormat()); ev.Graphics.DrawString(riga.Cells[3].Value.ToString(), printFont, Brushes.Black, leftMargin + 160, yPos, new StringFormat()); ev.Graphics.DrawString(riga.Cells[4].Value.ToString(), printFont, Brushes.Black, leftMargin + 285, yPos, new StringFormat()); ev.Graphics.DrawString(riga.Cells[5].Value.ToString(), printFont, Brushes.Black, leftMargin + 575, yPos, new StringFormat()); count++; } if (numRow < clientiDataGridView1.Rows.Count) { ev.HasMorePages = true; numPage++; } else { numPage = 1; numRow = 0; ev.HasMorePages = false; } }
Il codice così scritto stampa in sequenza come se fosse una tabella tutti i campi che volete del datagridview
penso si potesse astrarre ancora,anzi sicuramente lo si può fare, ma avevo poco tempo per trovare una soluzione ed anche se questa sembra sporca funziona
Associazione Culturale DotNetCampania - C.F.: 95127870632