Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Stampare DataGridView
domenica 10 febbraio 2008 - 12.27
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
walter.tomiati.90
Profilo
| Junior Member
121
messaggi | Data Invio:
dom 10 feb 2008 - 12:27
Salve,
ho la necessità di scrivere un codice in vb 2005 per stampare una datagridview...e possibile ???
Tomiati Walter
---> Gabba, Gabba, Hey !!! <---
hidden
Profilo
| Newbie
23
messaggi | Data Invio:
mer 13 feb 2008 - 14:11
>Salve,
>ho la necessità di scrivere un codice in vb 2005 per stampare
>una datagridview...e possibile ???
>
>Tomiati Walter
>---> Gabba, Gabba, Hey !!! <---
Certo devi sapere che anche se molto complesso il componente PrintDocument è molto potente
utilizza il codice che ti posto e vedrai che stampa per di più nella prima pagina ti lascia anche dello spazio in alto per stampare l'intestazione.
N.B. KDResoconto è il nome della tua datagridView
Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Try
Static RigheStampate As Integer
Static PagineStampate As Integer
Static MiePagine As Integer
Dim RigheTotali As Integer = KDResoconto.Rows.Count
Dim ControllaPagine As Boolean = True
Dim Rect As Rectangle
Dim RectQuality As Rectangle
Dim ColCorrente As Integer = 0
Dim Top As Integer = 25 ' e.MarginBounds.Top
Dim Left As Integer = 25 ' e.MarginBounds.Left
Dim Height As Integer = KDResoconto.RowTemplate.Height
Dim MaxRighe As Integer = e.MarginBounds.Height / Height
Dim MaxPagine As Integer = KDResoconto.Rows.Count / MaxRighe
Dim MPX As Integer = (KDResoconto.Rows.Count \ MaxRighe) + 1
Dim BrHeader As SolidBrush = New SolidBrush(Color.Gray)
Dim Hfont As Font = KDResoconto.Font
Dim Fc As String
Dim Fr As String
For Each col As DataGridViewColumn In KDResoconto.Columns
Fc = ""
Dim ColText As String = col.HeaderText
Dim Sz As System.Drawing.SizeF = e.Graphics.MeasureString(ColText, Hfont)
While Sz.Width > col.Width
ColText = ColText.Remove(ColText.Length - 1, 1)
Sz = e.Graphics.MeasureString(ColText + "...", Hfont)
Fc = "..."
End While
Rect = New Rectangle(Left, Top, col.Width, Height)
e.Graphics.FillRectangle(BrHeader, Rect)
e.Graphics.DrawString(ColText + Fc, Hfont, Brushes.Black, Left, Top + (e.Graphics.MeasureString(ColText, Hfont).Height / 2))
Left += col.Width
If Left > e.PageBounds.Right - 25 Then
MsgBox("Attenzione i campi da stampare sono troppi e la stampa non sarà effettuata correttamente" + Chr(13) + Chr(13) + "Possibili Soluzioni:" + Chr(13) + " .Impostare la stampa in modo Orizzontale" + Chr(13) + " .Selezionare un foglio di dimensioni maggiori" + Chr(13) + " .Ridurre il numero di campi da stampare", MsgBoxStyle.Information)
Exit For
End If
Next
Dim BrRow As SolidBrush = New SolidBrush(Color.Transparent)
Dim PnRow As Pen = New Pen(Color.Black)
Dim RigaCorrente As Integer = 0
For RigaCorrente = RigheStampate To RigheStampate + MaxRighe
Left = 25 ' e.MarginBounds.Left
Top += Height
For Each col As DataGridViewColumn In KDResoconto.Columns
Fr = ""
Dim CelText As String = KDResoconto.Rows(RigaCorrente).Cells(col.Name).Value.ToString
Dim Sz As System.Drawing.SizeF = e.Graphics.MeasureString(CelText, Hfont)
While Sz.Width > col.Width
CelText = CelText.Remove(CelText.Length - 1, 1)
Sz = e.Graphics.MeasureString(CelText + "...", Hfont)
Fr = "..."
End While
Rect = New Rectangle(Left, Top, col.Width, Height)
e.Graphics.FillRectangle(BrRow, Rect)
e.Graphics.DrawRectangle(PnRow, Rect)
e.Graphics.DrawString(CelText + Fr, Hfont, Brushes.Black, Left, Top + (e.Graphics.MeasureString(CelText, Hfont).Height / 2))
Left += col.Width
Next
RigheStampate += 1
MiePagine = PagineStampate + 1
If RigheStampate >= KDResoconto.Rows.Count Then
ControllaPagine = False
e.HasMorePages = False
RigheStampate = 0
PagineStampate = 0
Exit For
End If
Next RigaCorrente
If ControllaPagine Then
PagineStampate += 1
If PagineStampate < MaxPagine Then
e.HasMorePages = True
Else
e.HasMorePages = False
RigheStampate = 0
PagineStampate = 0
End If
End If
BrHeader.Dispose()
BrRow.Dispose()
PnRow.Dispose()
Catch ex As Exception
MessageBox.Show(ex.Message, ex.Source, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
In più aggiungi un pulsante e gestisci così l'evento click
Private Sub Stampa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Stampa.Click
If (KOrizzontale.Checked) Then 'CheckBox per selezionare la stampa orizzontale
PrintDocument1.DefaultPageSettings.Landscape = True
PageSetupDialog1.PageSettings.Margins.Bottom = 360
PageSetupDialog1.PageSettings.Margins.Left = 0
PageSetupDialog1.PageSettings.Margins.Right = 0
PageSetupDialog1.PageSettings.Margins.Top = 0
Else
PageSetupDialog1.PageSettings.Landscape = False
PageSetupDialog1.PageSettings.Margins.Bottom = 360
PageSetupDialog1.PageSettings.Margins.Left = 0
PageSetupDialog1.PageSettings.Margins.Right = 0
PageSetupDialog1.PageSettings.Margins.Top = 0
End If
PageSetupDialog1.ShowDialog()
PrintPreviewDialog1.WindowState = FormWindowState.Maximized
PrintPreviewDialog1.PrintPreviewControl.Zoom = 1
PrintPreviewDialog1.ShowDialog(Me)
End Sub
Spero di esserti stato d'aiuto. Se hai ancora bisogno di aiuto non esitare a chiedere. Comunque se cerchi un po in giro su google puoi anche trovare qualche esempio. Però se hai altri problemi ti posso inviare io qualche esempio già bello e pronto.
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
mar 18 mar 2008 - 21:13
Ciao
sto usando anch'io questa procedura per stamapare il contenuto di un datagridview.
Ma è un paio di giorni che ci giro intorno ma non riesco ad accodargli un'altra datagridview.
In pratica dopo aver stampato il contenuto di una dgv che contiene alcune righe (una decina) vorrei stampare una seconda dgv che carico da un database.
Se ti venisse in mente qls fammelo sapere
Grazie ancora
alexmed
Alexia
Profilo
| Newbie
46
messaggi | Data Invio:
dom 3 gen 2010 - 14:38
Ciao scusate se combinerò qualche paciugo, ma non sono molto pratica.....
non me ne capisco molto di programmazione anzi quasi nulla.....
mi cimento solo per divertimento e passione.... ma questa passione ha fatto in modo che mi andassi a impelagare in cose piu grandi della mia conoscenza... ora vengo al dunque.... tempo fa ho fatto un lavoretto con excel per un mio amico e direi che è uscito egreggiamente bene.... si trova su youtube sotto alexia8520 è un database..... se non chè ogni tanto excel fa qualche capriccio con le formattazioni nelle celle... e cosi ogni 2 o 3 mesi devo riprendere gli errori di format... allora ho pensato bene di provare a farlo con vb 2008 express...
procedevo troppo bene... era un sogno...
ma nel momento in qui ho bisogno di progettare un qualcosa che mi manda in stampa il trimestre o tutta la lista ufficio...
un MURO gigante
ho cercato da tutte le parti ma senza arrivare a qualcosa di concreto... ci metto il fatto che non me ne capisco quasi nulla e xciò gran parte del muro è costruito da me
io sto facendo questo database in vb. ed avendo l'express non ho il crystalreport e nulla che possa (da quanto ho capito) semplificare una stampa di un datagrid.... posseggo visual studio 2005 originale regalatomi da un mio Amico che xò si è trasferito e cosi ho perso tutti i contatti....
in questa copia c'è anche crystal etc etc se ritenete necessario che installo quello per facilitarmi nel progetto son pronta a farlo ma Vi prego AIUTOOOOOO
p.s. se vedete su youtube Vi rendete conto a grandi linee di cosa ho bisogno Grazie Mille
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
dom 3 gen 2010 - 22:01
1230_PrintDataGridView_src_VB.zip
Ciao
In allegato trovi un progetto per la stampa del DataGridView.
Io uso le versioni express quindi niente Crystal Reports.
Se hai bisogno chiedi pure.
Il progetto originale lo trovi qui:
http://www.codeproject.com/KB/grid/PrintDataGridView.aspx
dove trovi anche come si usa.
alexmed
Alexia
Profilo
| Newbie
46
messaggi | Data Invio:
lun 4 gen 2010 - 13:00
Cavoli ......................
non ci capisco lo stesso
sarà meglio che mi prendo qualche libro
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
lun 4 gen 2010 - 14:49
Ciao
se mi dici cosa non ti è chiaro magari posso spiegartelo.
alexmed
Alexia
Profilo
| Newbie
46
messaggi | Data Invio:
lun 4 gen 2010 - 15:35
Punto Primo Grazie della cortese Attenzione e della Gentilezza...
Ti Spiego il Tutto....
Appena ho Aperto il Tuo lavoro mi sono trovata paura perchè non ci capivo nulla.... poi anche le spiegazioni in inglese
non sono per niente a conoscenza della lingua... capisco le cose basilari e poi mi aiuto con google traduttore... comnq non è solo questo il fatto xqui mi sono spaventata
Allora 1) ho provato a lincare dove Tu mi hai messo a disposizione. e dove Tu dici che ci sono anche le spiegazioni
tutto in madre lingua
e poi di li ho provato a scaricare i progetti ma non c'è stato verso..
ho provato e riprovato (deducevo che forse mi sarei dovuta registrare e ho provato a mettere i dati ) ma nulla.... cmnq no problem ho tirato giu il Tuo lavoro.... e appena l'ho aperto Mamma Mia
mi sono persa d'animo.... poi invece con un pò di coraggio mi ci sono messa dietro.... ora vengo al dunque (scusa se mi dilungo ma devo per farTi capire anche la mia conoscenza in materia)
Sul mio lavoro ho creato una nuova form3 dove ho copiato e incollato tutto il tuo lavoro. e poi modificato con il mio db... e invece che Persons, l'ho nominato con il mio che è semplidemente db1... e la cartella si chiama data... fino qui tutto bene.... ma mi sono accorta che il Tuo lavoro mi va a prendere il data cosi come è.... mentre invece io dalla form2 che è quella che mi trova i clienti con una query dove filtro per DATE.... cioè dal mese anno al mese anno.... e poi di li devo mandare in stampa......
cerco di spiegarmi meglio come è il mio lavoro... form1 login... form2 gestione clienti.... cosi ché ho messo un datagridview sulla form2 (scegli origine dati) ho selezionato DatabindingSource.... io poi da li ho le varie funzioni di ricerca e di filtraggio... compreso quella per il trimestrale.... una volta filtrato mi recupera chessò 20 clienti?? bene io "vorrei" mandare in stampa solo quelli....
Spero di essermi spiegata abbastanza bene.... e scusami se ho scritto un libro
Grazie di Nuovo
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
lun 4 gen 2010 - 17:04
Ciao
non c'è nulla di cui aver paura, soprattutto se sei riuscita già a importare i dati sul DataGridView dal database.
Devi semplicemente fare 2 passaggi:
1. copiare il file "PrintDGV.vb" che trovi sotto la cartella del progetto "PrintDataGridView" nella cartella del tuo progetto.
2. creare un button e nell'evento click mettere il codice che manderà in stampa la tua DGV
Trascini un button sul Form2 --> lo rinomini in btnStampaDataGridView --> doppio click sul butto e nel codice metti:
PrintDGV.Print_DataGridView(qui_metti_il_nome_della_tua_DataGridView)
Quindi una cosa del genere
Private Sub btnStampaDataGridView_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStampaDataGridView.Click
PrintDGV.Print_DataGridView(DataGridView1)
End Sub
Fammi sapere
alexmed
Alexia
Profilo
| Newbie
46
messaggi | Data Invio:
mar 5 gen 2010 - 02:24
Ciao....
Scusa se non ti ho Rispsto prima.... per via che mi si è guastata la chiavetta.... e dato che intanto volevo prendere quella della tre stasera ho colto l'occasione..... fino ad ora non posso lamentare nulla....
loro dicono tenetevi forte xche si naviga a chissà che velocità..... non è proprio così..... ma non mi lamento.... solo x il fatto che navigo per 300 ore a 20 € contro le 100 ore a 30€..... ma valli a capire cosa e come mai tutti non si adeguano alle stesse cifre e piani..... cmnq lasciando perdere il tutto.....
sei Stato un GRANDE
mi hai risolto un problema che mai e poi mai sarei riuscita ad uscirne....
sei stato veramente Fantastico.......
solo una cosa mi fa rabbia
tra Virgolette "" una cosa abbastanza facile a vedersi.... e io non ne sarei mai venuta a capo neanche se avessi avuto 100 vite a disposizione....
ma cosa devo fare?? cosa devo leggere per riuscire a capire "" almeno in parte dove possono essere i problemi per poi cercare nel punto giusto per risolverli???.....
Ora tre cose sempre legate al tuo Allegato
1) la tua form Print Option c'è la possibilità di passarla su vb2008?? giusto per non rifare tutto il lavoro in vb2005... se non si può no problem lo riscrivo tutto o x lo - in parte...
io ho provato a inserirlo mi vedeva tutto meno la form.. cosi ché mi portava errori su errori.. ho scelto la via più breve l'abbandono
2) c'è quella funzione dove puoi inserire dello scritto a inizio report"" (Funzione Bella e Utilissima) ma sul lato Dx appare data e ora quella posso eliminarla??
3) Questo lo dico per chi come me non se ne capisce un gran che... ma che per la fortuna mia mi è venuto in mente di cliccare con il Dx e leggere INSERISCI NEL PROGETTO.... perche quando ho fatto quello che mi Hai Detto Tu: Devi semplicemente fare 2 passaggi:
1. copiare il file "PrintDGV.vb" che trovi sotto la cartella del progetto "PrintDataGridView" nella cartella del tuo progetto.
2. creare un button e nell'evento click mettere il codice che manderà in stampa la tua DGV.....................
ma una volta aperto vb2005 ho dovuto fare: INSERISCI NEL PROGETTO... senno non mi vedeva nulla.... mi ero gia quasi arresa
Sei Stato Gentilissimo.... Sei Stato Veramente Grande.... Grazie Mille......
Non ci sono Pagine per poterTi Ringraziare......
poi se sarà possibile disturbarti per eventuali problemi spero di poterTi disturbare.....
P.S. Siete dei Maghi... un sacco di volte leggo nei forum di gente con dei problemi tipo me.. che non sanno più dove girarsi e che Voi risolvete con una Estrema facilità direi presso ché disarmante. da farci sentire piccoli ignoranti....
Di Nuovo Mille Grazie
Alexia
Profilo
| Newbie
46
messaggi | Data Invio:
mar 5 gen 2010 - 02:46
Scusa Correggimi se Sbaglio riguardo a quella domanda su come togliere la data che mi metteva sulla Stampa... guardando sul Tuo Progetto e cioè PrintDGV ho visto questo codice che ora Ti incollo: 'Dim s As String = Now.ToLongDateString + " " + Now.ToShortTimeString
'e.Graphics.DrawString(s, New Font(dgv.Font, FontStyle.Bold), _
'Brushes.Black, e.MarginBounds.Left + (e.MarginBounds.Width - _
'e.Graphics.MeasureString(s, New Font(dgv.Font, FontStyle.Bold), _
'e.MarginBounds.Width).Width), e.MarginBounds.Top - _
' e.Graphics.MeasureString(PrintTitle, _
' New Font(New Font(dgv.Font, FontStyle.Bold), FontStyle.Bold), _
' e.MarginBounds.Width).Height - 13)
ho solo messo ' per annullare l'esecuzione per provare... e ho visto che la data è sparita....
ma se Tu mi ci dai un occhiata, puoi vedere se non incappo in qualche Errore.....
Grazie Grazie Grazie.....
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
mar 5 gen 2010 - 11:46
Ciao
Vedo che te la cavi benissimo!
Nonostante le mie indicazioni errate tra l'altro.
Per quanto riguarda il form "PrintOptions" non ci sono problemi a passarlo su 2008, importalo come hai fatto per la classe "PrintDGV.vb"
Fammi sapere
Ciao
alexmed
Alexia
Profilo
| Newbie
46
messaggi | Data Invio:
mar 5 gen 2010 - 13:16
Ciao.......
Non Dirlo manco x scherzo: i tuoi errori
sono cose che Tu vedi Palesi
Sei Stato di Grandissimo Aiuto e senza il Tuo Aiuto avrei buttato tutto all'aria....
cmnq io c'ho provato a passare il tutto su 2008 e ho fatto: inserisci nel progetto ma la form opzioni non me la vede
rimane la cartellina bianca e pur facendo quel passaggio rimane sempre bianca....
e se provo ad aprire la form mi da solo le immagini dei tre tasti...
dove sbaglio???
Retifico il Messaggio
Mi sono Passata tutto il lavoro ma solo il Codice... in riguardo alla form lo rifatta papale papale.... tutto ok... non mi segnala nessun errore... se non ché quando lancio l'applicazione e mando in stampa.... Errore: Riferimento a un Oggetto non impostato su un'istanza di oggetti
ma che cavolo vuole ancora???
...
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
mar 5 gen 2010 - 16:45
è una segnalazione generica, l'errore potrebbe non essere collegato alla stampa della DGV.
Quando ti dà l'errore dovrebbe segnalarti anche la riga evidenziandotela in giallo.
Posta anche quella riga per iniziare a capire.
alexmed
Alexia
Profilo
| Newbie
46
messaggi | Data Invio:
mar 5 gen 2010 - 18:25
Nulla nessuna Riga.... io ho compilato "" il tutto copiando e incollando tutto il codice sulla form rifatta exnovo....
quando premo F5 mi si apre il programma... tutto fila liscio... quando chiedo la stampa mi si apre la form printoptions... e fin qui tutto bene l
ascio invariato il tutto e do OK
a quel punto mi scrive quello che ti ho detto... e 0errori... 0avvisi... 0 messaggi....
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
mar 5 gen 2010 - 18:33
Così è un pò difficile capire il problema, se vuoi passami il progetto che gli dò un'occhiata.
Il mio indirizzo: alexmed@tiscali.it
alexmed
Alexia
Profilo
| Newbie
46
messaggi | Data Invio:
mar 5 gen 2010 - 19:30
Cavoli...
lo Sistemo un attimo per via che essendo in progettazione con vari pulsanti ci capisco io... solo per il fatto che al momento non sapendo cosa che funzioni farle fare allora hanno nomi che non ti ci potresti orientare......
e comunque faccio cosi io ti invio il mio originale...
e se non è troppo uno sbattimento hai tu sia la soluzione che anche il progetto tuo per aggiungere il tutto...
anche xche se c'è qualche sbaglio... (e c'è di sicuro) ti aumenterei la pena
Alexia
Profilo
| Newbie
46
messaggi | Data Invio:
mer 6 gen 2010 - 14:46
Direi che a Gentilezza e Solerzia è Davvero da Premiare....
Grazie della correzione... Grande Correzione..
Vorrei "" chiedere se si può lavorare sui margini della stampa sul tuo modulo DGV.vb.... per via che ho bisogno di tutto lo spazio che mi offre il foglio.... perciò se si poteva impostare i margini un pò più in altezza e larghezza....
Grazie INFINITE
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !