1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| Private printFont As Font
Private reader As OleDbDataReader
Private Sub btnImprimer_Click(sender As System.Object, e As System.EventArgs) Handles btnImprimer.Click
' tes éléments de requete
' ...
Try
Dim prdoc As New System.Drawing.Printing.PrintDocument()
printFont = New Font("Courier New", 10) ' utilise une police non proportionnelle qui permet la régularité des caractères pour l'affichage
reader = cmd.ExecuteReader()
AddHandler prdoc.PrintPage, AddressOf Me.prdoc_PrintPage
If reader.HasRows Then
reader.Read() ' pour être prêt
prdoc.Print()
Else
MessageBox.Show("Aucune ligne.")
End If
Catch ex As Exception
MsgBox(ex.ToString)
End Try
reader.Close()
End Sub
' L'évènement PrintPage est envoyé pour chaque page qui doit être imprimée.
Private Sub prdoc_PrintPage(ByVal sender As Object, ByVal ev As System.Drawing.Printing.PrintPageEventArgs)
Dim linesPerPage As Single = 0
Dim yPos As Single = 0
Dim count As Integer = 0
Dim UneLigne As String = Nothing
Dim bLigne As Boolean = True ' présence d'autres éléments à lire
' Calcule le nombre de ligne par page.
linesPerPage = ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics)
' Iprime chaque ligne issu de la BDD.
While count < linesPerPage And bLigne
UneLigne = String.Format(" {0} {1} {2} ", reader.GetInt32(0).ToString.PadRight(10), reader.GetString(1).PadRight(30), reader.GetString(2).PadRight(30)) ' constitue la ligne avec espacement régulier
yPos = ev.MarginBounds.Top + count * printFont.GetHeight(ev.Graphics)
ev.Graphics.DrawString(UneLigne, printFont, Brushes.Black, ev.MarginBounds.Left, yPos, New StringFormat())
count += 1
bLigne = reader.Read ' la lecture du reader indique s'il y a d'autres éléments en bBDD
End While
' d'autres éléments de la BDD?, une autre page à imprimer.
If bLigne Then ev.HasMorePages = True Else ev.HasMorePages = False
End Sub |
Partager