Stampa scadenze

mercoledì 26 marzo 2014 - 23.49

Peppino Profilo | Junior Member

Ciao a tutti.
Ho postato questo quesito un'altra volta, ma non avendo l'aiuto sperato ho rimandato il problema. Adesso volevo risolverlo e mi sono messo a fare delle ricerche, leggere, vedere esempi ma ahimè ho di quello che ho letto e riletto, visto e rivisto non ho capito niente io, oppure non ho trovato niente che mi potesse aiutare a risolvere il mio problema.
Uso Visual Basic 2010 e per le stampe uso PrintDocument. Fino a quando si tratta di singolo nominativo che estraggo da una combobx tutto ok. Se invece devo mandare in stampa le scadenze dell'intera tabella dei nominativi qui il problema che non sono riuscito a risolvere.
Vorrei che mi dovrebbe stampare 20 righe per foglio compreso la riga del nominativo.

Descrivo il codice come ho provato ma non funziona

Tramite query estraggo il 'numero' dei nominativi.

Dim Font1 As New Font("Arial", 12, FontStyle.Bold)
Dim Font2 As New Font("Arial", 10)
Static ix AS Integer
Static i AS integer
Dim riga AS Integer = 150
Dim righePerPagina AS Integer = 20
Dim ragSoc as String
Dim docum AS String
Dim pagamento AS String
Dim datadoc AS Date
Dim scadenza AS Date
Dim datapag AS Date

Eseguo il ciclo dei nominativi

cmd.Connection = SqlHelper.ConnessioneDatabase
cmd.CommandText = "SELECT * FROM Nominativi Order By RagioneSociale"
adp = New SqlDataAdapter(cmd)
dst = New DataSet
adp.Fill(dst, "RagioneSociale")
bds = New BindingSource()
bds.DataSource = dst
bds.DataMember = "RagioneSociale"
adp.Dispose()
cmd.Dispose()
cmd.Connection.Close()

For ix = ix To ix + numero - 1
Dim totalenominativo As Decimal = 0
If ix < bds.Count Then
nominativo = CStr(dst.Tables("RagioneSociale").Rows(ix).Item(0))
e.Graphics.DrawString(nominativo, Font1, Brushes.Black, 35, riga)
riga += 18

cmd = New SqlCommand()
cmd.Connection = SqlHelper.ConnessioneDatabase
cmd.CommandText = "SELECT * FROM Scadenze WHERE RagioneSociale=@nominativo"
cmd.Parameters.Add(New SqlParameter("@nominativo", SqlDbType.VarChar))
cmd.Parameters("@nominativo").Value = nominativo
adp2 = New SqlDataAdapter(cmd)
dst2 = New DataSet
adp2.Fill(dst2, "Documento")
adp2.Fill(dst2, "DataDoc")
adp2.Fill(dst2, "Dare")
adp2.Fill(dst2, "Scadenza")
adp2.Fill(dst2, "Avere")
adp2.Fill(dst2, "DataAvere")
adp2.Fill(dst2, "TipoPagamento")

bds2 = New BindingSource()
bds2.DataSource = dst2
bds2.DataMember = "Documento"
bds2.DataMember = "DataDoc"
bds2.DataMember = "Dare"
bds2.DataMember = "Scadenza"
bds2.DataMember = "Avere"
bds2.DataMember = "DataAvere"
bds2.DataMember = "TipoPagamento"
adp2.Dispose()
cmd.Dispose()
cmd.Connection.Close()

i = 0
For i = i To i + righePerPagina
Dim dare AS Decimal = 0
Dim avere AS Decimal = 0
Dim saldo AS Decimal = 0
If i < bds2.Count Then
docum = CStr(dst2.Tables("Documento").Rows(i).Item(0))
datadoc = CStr(dst2.Tables("DataDoc").Rows(i).Item(1))
dare = CDec(dst2.Tables("Dare").Rows(i).Item(2))
scadenza = CDate(dst2.Tables("Scadenza").Rows(i).Item(3))
avere = CDec(dst2.Tables("Avere").Rows(i).Item(4))
datapag = CStr(dst2.Tables("DataAvere").Rows(i).Item(5))
pagamento = CStr(dst.Tables("TipoPagamento").Rows(i).Item(6))

e.Graphics.DrawString(docum, Font2, Brushes.Black, 85, riga)
e.Graphics.DrawString(Formatta(CStr(datadoc), TipoFor.Data), Font2, Brushes.Black, 175, riga, allineaC)
e.Graphics.DrawString(Formatta(CStr(dare), TipoFor.Valuta), Font2, Brushes.Black, 265, riga, allineaR
e.Graphics.DrawString(Formatta(CStr(scadenza), TipoFor.Data), Font2, Brushes.Black, 355, riga, allineaC)
e.Graphics.DrawString(Formatta(CStr(avere), TipoFor.Valuta), Font2, Brushes.Black, 445, riga, allineaR)
e.Graphics.DrawString(Formatta(CStr(datapag), TipoFor.Data), Font2, Brushes.Black, 535, riga, allineaC)
e.Graphics.DrawString(pagamento, Font2, Brushes.Black, 625, riga)
saldo = dare - avere
e.Graphics.DrawString(Formatta(CStr(saldo), TipoFor.Valuta), Font2, Brushes.Black, 950, riga, allineaR)
totalenominativo += saldo
riga = CInt(riga + Font2.GetHeight)

Ora se faccio la stampa di una sola query, l'istruzione per il salto pagina lo metto qui ne modo seguente e va bene.
Con l'aggiunta del ciclo esterno non funziona.
e.HasMorePages = True
Else
e.HasMorePages = False
End If
Next
If totalenominativo > 0 Then
e.Graphics.DrawLine(Pens.Black, 880, riga - 3, 990, riga - 3)
e.Graphics.DrawString("Totale ", Font1, Brushes.Black, 780, riga - 7)
e.Graphics.DrawString(Formatta(CStr(totalenominativo), TipoFor.Valuta), Font1, Brushes.Black, 950, riga, allineaR)
End If
End If
Next
Siccome non so proprio come risolvere questo problema, è possibile avere un aiutino(per questo ne avrei proprio bisogno) dando una dritta a questo codice o una indicazione di un esempio che mi può dare la soluzione.
Confidando nella Vs. disponibilità come sempre, ringrazio anticipatamente.
Ciao, Peppino.

algraps Profilo | Junior Member

ciao,
spero di aiutarti...
qui dovresti trovare la tua soluzione:

http://stackoverflow.com/questions/21512539/printing-using-printdocument-with-many-rows

PrintDocument e' molto "bastardo"...

Ciao e fammi sapere
Al.
A.G.
http://nothingnessit.wordpress.com/

Peppino Profilo | Junior Member

Ciao Al, ciao a tutti.
Grazie per la risposta e per l'indicazione che mi hai dato, proverò a venirne a capo.
Ciao, Peppino.

algraps Profilo | Junior Member

Figurati,
Fammi sapere come va.
Ciao
Al.
A.G.
http://nothingnessit.wordpress.com/
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 !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5