Volledige versie bekijken : Printen met VB.Net en SQL Db



DriesCORE
18 March 2012, 14:46
Dag iedereen,

Ik heb een irritant probleem. Ik probeer de gegevens van mijn sql database te printen maar dit is precies toch niet zo simpel als dat het lijkt. Het printen op zich lukt wel, tot er meer dan 1 bladzijde bij te pas komt. Het lukt met gewoon niet om 2 VERSCHILLENDE bladzijden te maken.
Er zijn twee scenarios:

Oneindige printloop waarbij slechts de eerste pagina oneindig wordt herhaald
Slechts 1 pagina

Dit is mijn code:

Private Sub prntDocument_PrintPage(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles prntDocument.PrintPage
Const maxStudentsPerPage As Integer = 67
Dim strFirstPage As String = ""
Dim strSecondPage As String = ""

Dim intAantalStudenten As Integer = objPrint.TotalStudents
Dim strLeerling As String = String.Empty

Dim scmdCommand As New SqlClient.SqlCommand
Dim cnnLeerlingen As New SqlClient.SqlConnection
Dim sdrReader As SqlClient.SqlDataReader

'fonts
Dim fontHeader As Font
Dim HeaderFontName As String = "Courier New"
Dim HeaderFontSize As Integer = 10
fontHeader = New Font(HeaderFontName, HeaderFontSize, FontStyle.Bold)

Dim fontText As Font
Dim TextFontName As String = "Courier New"
Dim TextFontSize As Integer = 10
fontText = New Font(HeaderFontName, HeaderFontSize, FontStyle.Regular)
'end of fonts


cnnLeerlingen.ConnectionString = My.Settings.LeerlingenConnectionString

scmdCommand.Connection = cnnLeerlingen
scmdCommand.CommandText = "SELECT ID, Voornaam, Achternaam, Klas, Aanmeldtijd, Afmeldtijd FROM tblData"

cnnLeerlingen.Open()
sdrReader = scmdCommand.ExecuteReader

Do While sdrReader.Read
If (CInt(sdrReader.Item("ID")) <= maxStudentsPerPage) Then
strFirstPage &= sdrReader.Item("ID").ToString & vbTab & sdrReader.Item("Voornaam").ToString & vbTab & sdrReader.Item("Achternaam").ToString & _
vbTab & sdrReader.Item("Klas").ToString & vbTab & sdrReader.Item("Aanmeldtijd").ToString & vbTab & sdrReader.Item("Afmeldtijd").ToString & vbNewLine
If (CInt(sdrReader.Item("ID")) <= (maxStudentsPerPage * 2)) Then
strSecondPage &= sdrReader.Item("ID").ToString & vbTab & sdrReader.Item("Voornaam").ToString & vbTab & sdrReader.Item("Achternaam").ToString & _
vbTab & sdrReader.Item("Klas").ToString & vbTab & sdrReader.Item("Aanmeldtijd").ToString & vbTab & sdrReader.Item("Afmeldtijd").ToString & vbNewLine
End If
End If

Loop

sdrReader.Close()
cnnLeerlingen.Close()

e.Graphics.DrawString(strFirstPage, fontText, Brushes.Black, 80, 50)
e.Graphics.DrawString(strSecondPage, fontText, Brushes.Black, 80, 50)
End Sub

Als ik er "e.hasMorePages = True" bijzet, komt de infinite loop in het spel.
Hopelijk kan iemand me hierbij helpen!

Alvast bedankt,
Dries