Buongiorno a tutti.
Uso Visual Basic 2010 Versione Express, Sql Server 2008 R2 e PrintDocument per la stampa.
Non sono nuovo del Forum, sono registrato da quando ha avuto inizio
l'articolo - Le Avventure in VB.NET di un Principiante - poi ho dovuto
abbandonare. Adesso ho ripreso ma mi sono affossato in un problema di stampa.
Prima di scrivere questo post, per almeno una settimana ho girato in rete in cerca
di qualche articolo che potesse aiutarmi a risolvere il mio problema ma niente.
Forse essendo uno poco esperto sono io che non sono riuscito ad individuare quello giusto.
Espongo il problema facendo un piccolo esempio di quello che vorrei realizzare
sperando di essere abbastanza chiaro.
Dim cmd As SqlCommand
Dim dst As DataSet
Dim adp As SqlDataAdapter
Dim bds As BindingSource
Dim RighePerPagina AS Integer = 20
Static RigheStampate AS Integer
Dim NumeroPagine AS Integer = 1
Dim cliente As String = ComboBoxCliente.Text
Dim causale As String
Dim articolo As String
Dim i AS Integer
Dim x AS Integer = 20 'Margine sinistro
Dim y AS Integer = 180 ' Margine superiore inizio stampa
Dim RecordCausali As Integer = 'Totali record della tabella CAUSALI.
Dim RecordUscite As Integer = 'Totali record della tabella USCITE.
cmd = New SqlCommand()
cmd.Connection = SqlHelper.ConnessioneDatabase
cmd.CommandText = "SELECT Causale FROM Causali"
adp = New SqlDataAdapter(cmd)
dst = New DataSet
adp.Fill(dst, "Causale")
bds = New BindingSource()
bds.DataSource = dst
bds.DataMember = "Causale"
adp.Dispose()
cmd.Dispose()
cmd.Connection.Close()
For j As Integer = j To RecordCausali - 1
If j < bds.Count Then
causale = CStr(dst.Tables("Causale").Rows(j).Item(0))
e.Graphics.DrawString(causale, Font3, Brushes.Red, x, y)
RigheStampate += 1
y += 20
cmd = New SqlCommand()
cmd.Connection = SqlHelper.ConnessioneDatabase
cmd.CommandText = "SELECT Cliente, Causale, Articolo FROM Uscite WHERE Cliente=@cliente and Causale=@causale"
cmd.Parameters.Add(New SqlParameter("@cliente", SqlDbType.VarChar))
cmd.Parameters("@cliente").Value = cliente
cmd.Parameters.Add(New SqlParameter("@causale", SqlDbType.VarChar))
cmd.Parameters("@causale").Value = causale
adp = New SqlDataAdapter(cmd)
dst = New DataSet
adp.Fill(dst, "Articolo")
bds = New BindingSource()
bds.DataSource = dst
bds.DataMember = "Articolo"
adp.Dispose()
cmd.Dispose()
cmd.Connection.Close()
For i = 0 To RecordUscite - 1
If i < bds.Count Then
articolo = CStr(dst.Tables("Articolo").Rows(i).Item(2))
e.Graphics.DrawString(articolo, Font4, Brushes.Red, x, y)
RigheStampate += 1
y += 20
End If
Next
End If
Next
Con questo codice vorrei che il salto pagina lo deve fare per RigheStampate
con un solo ciclo non ho problemi, con cicli annidati è tutto un problema.
IF RigheStampate > RighePerPagina Then
e.HasMorePages = True
RigheStampate = 0
NumeroPagina += 1
End If
Ho provato in tanti modi ma alla fine mi sono arreso.
Dove e come impostare il salto pagina in base a RigheStampate?
Essendo la prima volta che scrivo, non so se ci sono delle regole da rispettare.
Chiedo scusa se esistono e io magari non ho rispettato.
Ringrazio in anticipo per l'eventuale risposta.
Un saluti a tutti. Peppino.