SYSTEM.DRAWING.PRINTING - ERRO

AARONZINHO2 13/08/2015 19:19:14
#449950
Boa noite estou com algum problema no codigo e não consigo arrumar, o programa cria a 1 pagina porem quando cria a segundo ele não adiciona a continuação, a pagina fica em branco.

  Imports System.Drawing.Printing
Imports MySql.Data.MySqlClient

Public Class Form1
Public paginaAtual As Integer = 1
Dim codigoProduto
Dim nomeProduto
Dim precoProduto
Dim linhaAtual = 1
Dim i = 1


Private Sub rptProdutos(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
Dim conexao As String = [Ô]Server=127.0.0.1; Port=3306; User id=root; password=; Database=tabela;[Ô]
Dim novaConexao As New MySqlConnection(conexao)
Dim comando As String = [Ô]SELECT * FROM 'tabela'.'usuario'[Ô]
Dim da As New MySqlDataAdapter(comando, novaConexao)
Dim ds As New DataSet()
Dim total = da.Fill(ds) - 1
novaConexao.Open()

If da.Fill(ds) Then

End If

[ô]Margens
Dim margemEsq As Single = e.MarginBounds.Left
Dim margemSup As Single = e.MarginBounds.Top
Dim margemDir As Single = e.MarginBounds.Right
Dim margemInf As Single = e.MarginBounds.Bottom

[ô]Fontes
Dim fonteTitulo As Font
Dim fonteRodape As Font
Dim fonteNormal As Font

fonteTitulo = New Font([Ô]Verdana[Ô], 15, FontStyle.Bold)
fonteRodape = New Font([Ô]Verdana[Ô], 8)
fonteNormal = New Font([Ô]Verdana[Ô], 10)

[ô]Linhas
Dim caneta As New Pen(Color.Black, 1)
[ô]e.Graphics.DrawLine(caneta, margemEsq, 60, margemDir, 60)
e.Graphics.DrawImage(Image.FromFile([Ô]C:\[Ô] & [Ô]vb.gif[Ô]), 100, 68)
[ô]e.Graphics.DrawLine(caneta, margemEsq, 160, margemDir, 160)
[ô]e.Graphics.DrawString([Ô]Catálogo de Produtos[Ô], fonteTitulo, Brushes.Blue, margemEsq + 275, 80, New StringFormat())


[ô]impressão do titulo das colunas
Dim fonteColuna As New Font([Ô]Arial[Ô], 16)
e.Graphics.DrawString([Ô]Código[Ô], fonteColuna, Brushes.Red, margemEsq, 140, New StringFormat())
e.Graphics.DrawString([Ô]Produto[Ô], fonteColuna, Brushes.Red, margemEsq + 100, 140, New StringFormat())
e.Graphics.DrawString([Ô]Preço[Ô], fonteColuna, Brushes.Red, margemEsq + 500, 140, New StringFormat())
e.Graphics.DrawLine(caneta, margemEsq, 170, margemDir, 170)

Dim linhasPorPagina = 50 [ô]e.MarginBounds.Height / fonteNormal.GetHeight(e.Graphics) - 6

Dim codigoProduto = ds.Tables(0)(0)(0) [ô]codigo do produto
Dim nomeProduto = ds.Tables(0)(0)(1) [ô]nome do produto
Dim precoProduto = ds.Tables(0)(0)(2) [ô]preco do produto

While (linhaAtual < linhasPorPagina And (i < total))

[ô]acompanha a posição da linha atual
Dim posicaoDaLinha = margemSup + (linhaAtual * fonteNormal.GetHeight(e.Graphics) + 70)

[ô]imprime os dados relativo ao codigo , nome do produto e preço do produto
e.Graphics.DrawString(codigoProduto, fonteNormal, Brushes.Black, margemEsq, posicaoDaLinha, New StringFormat())
e.Graphics.DrawString(nomeProduto, fonteNormal, Brushes.Black, margemEsq + 100, posicaoDaLinha, New StringFormat())
e.Graphics.DrawString(FormatCurrency(precoProduto), fonteNormal, Brushes.Black, margemEsq + 500, posicaoDaLinha, New StringFormat())

[ô]faz o incremento no número de linha
linhaAtual += 1
[ô]verifica se ainda podemos imprimir , ou seja , se a linha atual é menor que o número
[ô]de linhas permitido pela página. Se for continuamos a atribuir os dados e a imprimir
If (linhaAtual < linhasPorPagina) Then
codigoProduto = ds.Tables(0)(i)(0) [ô]codigo do produto
nomeProduto = ds.Tables(0)(i)(1) [ô]nome do produto
precoProduto = ds.Tables(0)(i)(2) [ô]preco do produto
End If
i += 1
End While
[ô]imprime o rodape no relatorio
e.Graphics.DrawLine(caneta, margemEsq, margemInf, margemDir, margemInf)
e.Graphics.DrawString(System.DateTime.Now, fonteRodape, Brushes.Black, margemEsq, margemInf, New StringFormat())
e.Graphics.DrawString([Ô]Pag. [Ô] & paginaAtual.ToString, fonteRodape, Brushes.Black, margemDir - 50, margemInf, New StringFormat())
[ô]incrementa a página atual
paginaAtual += 1

[ô]vamos verificar se ainda existem registros para serem impressos
If (i < total) Then
e.HasMorePages = True
Else
e.HasMorePages = False
End If
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim pd As PrintDocument = New PrintDocument()
[ô]relaciona o objeto pd ao procedimento rptProdutos
AddHandler pd.PrintPage, AddressOf Me.rptProdutos
[ô]cria uma nova instância do objeto PrintPreviewDialog()
PrintPreviewDialog1 = New PrintPreviewDialog()
[ô]define algumas propriedades do obejto
With PrintPreviewDialog1
[ô]indica qual o documento vai ser visualizado
.Document = pd
.WindowState = FormWindowState.Maximized
.PrintPreviewControl.Zoom = 1 [ô]maxima a visualização
.Text = [Ô]Catálogo de Produtos[Ô]
[ô]exibe a janela de visualização para o usuário
.ShowDialog()
End With
End Sub
End Class
ASHKATCHUP 14/08/2015 10:21:38
#449970
Cade a declaração da variável linhaAtual?
TUNUSAT 14/08/2015 10:23:32
#449971
ASHKATCHUP,

Serve esta?

Public Class Form1
Public paginaAtual As Integer = 1
Dim codigoProduto
Dim nomeProduto
Dim precoProduto
[txt-color=#e80000]Dim linhaAtual = 1[/txt-color]
Dim i = 1


[][ô]s,
Tunusat.
ASHKATCHUP 14/08/2015 10:40:54
#449973
Ops, não tinha visto a declaração.

Bom, ai está o erro:
Dim posicaoDaLinha = margemSup + (linhaAtual * fonteNormal.GetHeight(e.Graphics) + 70)


Se uma nova página é criada, a linhaAtual deveria ser zerada.
DAMASCENO.CESAR 26/08/2015 20:26:15
#450536
AARONZINHO2 se sua duvida foi sanada, encerre o topico e pontue corretamente
Faça seu login para responder