Quantcast
Channel: Visual Basic Tips and Tricks
Viewing all articles
Browse latest Browse all 2212

Salto Pagina con cicli For Next annidati

$
0
0

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.


Viewing all articles
Browse latest Browse all 2212