2010-06-09 1 views
9

Boy ho ricevuto un'educazione per esaminare questo aspetto. Immagino di essere stato rovinato da Powerbuilder, che ha funzionalità fantastiche per questo fuori dalla scatola.WPF: metodo migliore per la stampa di datagrids impaginati

Qualcuno scrive seriamente oggetti documentpaginator personalizzati per gestire le esigenze di reporting per le proprie app LOB? Voglio essere in grado di stampare "gratuitamente" e non dover codificare come un matto solo per prendere ciò che è sullo schermo e gettare su carta.

Come stanno facendo le persone? Qualcuno ha una terza parte consigliata per consentire la stampa di grandi quantità di dati?

Grazie

+0

Questa risposta può anche essere utile: http://stackoverflow.com/questions/2990727/net-library-for-drawing-tables-with-gdi –

+0

possibile duplicato di [Qual è il miglior approccio alla stampa/reporting da WPF ?] (http://stackoverflow.com/questions/180746/whats-the-best-approach-to-printing-reporting-from-wpf) –

risposta

1

impaginazione DataGrid è un enorme, enorme dolore. Semplicemente disegnando la griglia su una pagina non funzionerà come devi gestire cose come layout fisso, espandendo le celle orizzontalmente e verticalmente per mostrare tutti i dati, word wrapping, dividere colonne e righe nel margine della pagina, suddividendo le celle che traboccano una pagina in più pagine. Ricorda che non puoi scorrere o ridimensionare un controllo su un pezzo di carta. Anche se trovi un controllo magico che può fare tutto questo, una griglia con bordi, ombre e sfondi che sembrano buoni su uno schermo non apparirà bella sulla carta.

Per una vecchia app WinForms che ha stampato datagrids abbiamo implementato un'API di report completamente separata per le stampe. Abbiamo stampato l'origine dati ADO.Net sottostante utilizzando il controllo gratuito ReportViewer. Un tutorial è a gotreportviewer.com.

+0

grazie per quello. Idealmente mi piacerebbe identificare un controllo a griglia in giro che abbia un metodo di stampa su di esso. Stiamo utilizzando LINQ to SQL per questo progetto finora. – FauxReal

+0

@FauxReal: se riesci a trovare un controllo che possa farlo, fammi sapere. Ho aggiunto più dettagli alla mia risposta sul motivo per cui credo che non ne troverai uno. –

+2

Il controllo della griglia di well Xceed stamperà le griglie come un matto. Fa un ottimo lavoro anche a questo. Non servirà ogni rapporto immaginabile, ma stampa griglie alla grande. – FauxReal

0

Ho trovato il modo più semplice è quello di implementare una classe di DocumentPaginator generalizzata per impaginare tutto ciò che posso mettere sullo schermo. Con il mio DocumentPaginator non ho bisogno di preoccuparmi della stampa perché posso prendere qualsiasi controllo WPF arbitrario e dirgli di stampare, e se necessario occorreranno più pagine per visualizzare tutti i dati.

Uso anche una proprietà bool ereditata "PrintView" che l'utente può controllare. Alcuni dei miei controlli cambiano in qualche modo il loro aspetto utilizzando un trigger sulla proprietà "PrintView", quindi appariranno migliori quando stampati.

Descrivo la mia soluzione DocumentPaginator in dettaglio in this answer, inclusa una descrizione dell'algoritmo richiesto.