A paginação conta as paginas certinho mas exibe todos os registros na primeira folha e quando rolo para a segundfa folha, o print rola mas não tem dados.
Onde podee ser que estou errando?
'função ExecuteDS() que est NA CLASSE DBConnection
Public Function ExecuteDS(ByVal sql As String, ByRef tabela As String) As DataSet
Dim ds As New DataSet
Dim da As MySqlDataAdapter = New MySqlDataAdapter()
Try
OpenConnection()
cmd.CommandType = CommandType.Text
cmd.CommandText = sql
cmd.Connection = Conexao
da.SelectCommand = cmd
da.Fill(ds, tabela)
dt = ds.Tables(tabela)
da.Dispose()
Return ds
Catch ex As Exception
MsgBox(ex.Message)
End Try
Return ds
End Function
Imports MySql.Data.MySqlClient
Imports System.Text.RegularExpressions
Imports System.Math
Imports System.Drawing.Printing
Public Class Pedidos
'INICIO DAS DECLARAÇÕES DAS VARIAVEIS GLOBAIS
Dim accDb As New DBConnection
Dim leitor As DataSet = Nothing
Dim TabelaClientes As String = "clientes"
Dim TabelaProdutos As String = "produtos"
Dim TabelaPedidos As String = "pedidos"
Dim TabelaDetalhesPedidos As String = "detalhespedidos"
Private PaginaAtual As Integer = 1
Private TotalPaginas As Integer
Dim LinhaAtual As Integer = 0
Private Sub rptItensPedidos(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
Dim ccodigo As Integer = codigoped.Text
Dim produtoID As Integer
Dim unidade As String
Dim descricao As String
Dim preço As Integer
Dim quantidade As Integer
Dim subtotal As Integer
'variáveis para definição das configurações da impressora (margens, número de linhas, espessura da caneta)
Dim LinhasPorPagina As Single = 0
Dim PosicaoDaLinha As Single = 0
Dim MargemEsquerda As Single = e.MarginBounds.Left
Dim MargemSuperior As Single = e.MarginBounds.Top + 100
Dim MargemDireita As Single = e.MarginBounds.Right
Dim MargemInferior As Single = e.MarginBounds.Bottom
Dim CanetaDaImpressora As Pen = New Pen(Color.Black, 1)
'variáveis para armazenar as fontes que serão utilizadas durante a impressão
Dim FonteNegrito As Font
Dim FonteTitulo As Font
Dim FonteSubTitulo As Font
Dim FonteRodape As Font
Dim FonteNormal As Font
'definição das fontes (tamanho e estilo)
FonteNegrito = New Font("Arial", 9, FontStyle.Bold)
FonteTitulo = New Font("Arial", 20, FontStyle.Bold)
FonteSubTitulo = New Font("Arial", 12, FontStyle.Bold)
FonteRodape = New Font("Arial", 8)
FonteNormal = New Font("Arial", 9)
'********************************
'inicio imprime o cabeçalho do relatório
'********************************
e.Graphics.DrawLine(Pens.Black, MargemEsquerda, 60, MargemDireita, 60)
e.Graphics.DrawImage(Image.FromFile("imagens\" & "maco10.gif"), 100, 68)
e.Graphics.DrawString("PEDIDO", New Font("arial", 15, FontStyle.Regular), Brushes.Black, MargemEsquerda + 260, 80)
e.Graphics.DrawString("Dados da empresa", New Font("arial", 15, FontStyle.Regular), Brushes.Black, MargemEsquerda + 400, 80)
e.Graphics.DrawString("Pedido : ", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda, 160)
e.Graphics.DrawString(ccodigo, New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 140, 160)
Dim pgto As String
Dim PrintStringpedidos As String = "select p.pedidoID, p.clienteID, p.ativo, p.data, p.cobranca, p.entrega, p.frete, p.pgto, p.CondPgto, c.nome as nome, c.tipo as pessoa, c.cpf_cnpj as dcto from pedidos p inner join clientes c ON p.clienteID = c.clienteID where pedidoID= " & ccodigo
Dim DRP As DataSet = accDb.ExecuteDS(PrintStringpedidos, TabelaPedidos)
For Each linha As DataRow In DRP.Tables(0).Rows
e.Graphics.DrawString("Data : ", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 200, 160)
e.Graphics.DrawString(linha.Item("data"), New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 250, 160)
e.Graphics.DrawString("Frete : ", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 400, 160)
e.Graphics.DrawString(linha.Item("frete"), New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 450, 160)
If linha.Item("PGTO") = "V" Then
pgto = "À Vista"
e.Graphics.DrawString("PAGAMENTO:", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 300, 180)
e.Graphics.DrawString(pgto, New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 450, 180)
End If
If linha.Item("PGTO") = "P" Then
pgto = "À PRAZO"
e.Graphics.DrawString("PAGAMENTO:", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 300, 180)
e.Graphics.DrawString(pgto, New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 400, 180)
e.Graphics.DrawString("Forma: ", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 500, 180)
e.Graphics.DrawString(linha.Item("CondPgto").ToString.Replace(" ", ",") + " Dias", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 570, 180)
End If
Dim documento As String = ""
Dim TIPO As String = ""
If linha.Item("dcto").ToString.Length = 11 Then
' mascara de cpf
documento = String.Format("999,999,999-99", linha.Item("dcto").ToString)
TIPO = "CPF"
End If
If linha.Item("dcto").ToString.Length = 14 Then
' mascara de cnpj
documento = String.Format("99,999,999-9999-99", linha.Item("dcto").ToString)
TIPO = "CNPJ"
End If
e.Graphics.DrawString(TIPO & " : ", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda, 180)
e.Graphics.DrawString(documento, New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 140, 180)
e.Graphics.DrawString("Nome : ", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda, 200)
e.Graphics.DrawString(linha.Item("nome"), New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 140, 200)
e.Graphics.DrawString("Cobrança : ", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda, 220)
e.Graphics.DrawString(linha.Item("cobranca"), New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 140, 220)
e.Graphics.DrawString("Endereço : ", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda, 240)
e.Graphics.DrawString(linha.Item("entrega"), New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 140, 240)
Next linha
'********************************
'fim imprime o cabeçalho do relatório
'********************************
'define o número de linhas por página de acordo com a área de impressão e o tamanho da fonte
'subtraimos o valor 10 do resultado para acomodar o rodapé do relatório
'LinhasPorPagina = e.MarginBounds.Height / FonteNormal.GetHeight(e.Graphics) - 10
LinhasPorPagina = 3
Dim TotalNota As String = ""
'ativamos o tratamento de erro
Try
'*******************************************
'imprime os títulos das colunas do relatório
'*******************************************
e.Graphics.DrawLine(Pens.Black, MargemEsquerda, 260, MargemDireita, 260)
e.Graphics.DrawString("Cód.", FonteNormal, Brushes.Red, MargemEsquerda, 260, New StringFormat())
e.Graphics.DrawString("Unid.", FonteNormal, Brushes.Red, MargemEsquerda + 50, 260, New StringFormat())
e.Graphics.DrawString("Descrição", FonteNormal, Brushes.Red, MargemEsquerda + 100, 260, New StringFormat())
e.Graphics.DrawString("Preço", FonteNormal, Brushes.Red, MargemEsquerda + 350, 260, New StringFormat())
e.Graphics.DrawString("Qtde", FonteNormal, Brushes.Red, MargemEsquerda + 450, 260, New StringFormat())
e.Graphics.DrawString("Total", FonteNormal, Brushes.Red, MargemEsquerda + 550, 260, New StringFormat())
e.Graphics.DrawLine(Pens.Black, MargemEsquerda, 280, MargemDireita, 280)
'alimentamos as variáveis com as informações do primeiro registro
'extraído do banco de dados através do objeto OleDbDataReader
'iniciamos o loop através dos registros do DataReader
'respeitando o número de linhas por página
While (LinhaAtual < LinhasPorPagina And LinhaAtual <= leitor.Tables(0).Rows.Count)
For Each linha As DataRow In leitor.Tables(0).Rows
produtoID = linha("produtoID")
unidade = linha("unidade")
descricao = linha("descricao")
preço = linha("preço")
quantidade = linha("quantidade")
subtotal = linha("subtotal")
'TotalNota += subtotal
PosicaoDaLinha = MargemSuperior + 90 + (LinhaAtual * FonteNormal.GetHeight(e.Graphics))
e.Graphics.DrawString(produtoID, FonteNormal, Brushes.Black, MargemEsquerda + 50, PosicaoDaLinha, New StringFormat())
e.Graphics.DrawString(unidade, FonteNormal, Brushes.Black, MargemEsquerda + 100, PosicaoDaLinha, New StringFormat())
e.Graphics.DrawString(descricao, FonteNormal, Brushes.Black, MargemEsquerda + 150, PosicaoDaLinha, New StringFormat())
e.Graphics.DrawString(preço, FonteNormal, Brushes.Black, MargemEsquerda + 300, PosicaoDaLinha, New StringFormat())
e.Graphics.DrawString(subtotal, FonteNormal, Brushes.Black, MargemEsquerda + 350, PosicaoDaLinha, New StringFormat())
'TotalNota += subtotal
'e.Graphics.DrawString(TotalNota, FonteNormal, Brushes.Black, MargemEsquerda + 400, PosicaoDaLinha, New StringFormat())
LinhaAtual += 1
If (LinhaAtual < LinhasPorPagina) Then
produtoID = linha("produtoID")
unidade = linha("unidade")
descricao = linha("descricao")
preço = linha("preço")
quantidade = linha("quantidade")
subtotal = linha("subtotal")
'TotalNota += subtotal
End If
Next
End While
'*****************************
'imprime o rodapé do relatório
'*****************************
''linha transversal
e.Graphics.DrawLine(Pens.Black, MargemEsquerda, MargemInferior - 20, MargemDireita, PosicaoDaLinha)
e.Graphics.DrawLine(Pens.Black, MargemEsquerda, MargemInferior - 20, MargemDireita, MargemInferior - 20)
e.Graphics.DrawString("Total da Nota", FonteNormal, Brushes.Red, MargemEsquerda + 350, MargemInferior - 20, New StringFormat())
e.Graphics.DrawString(Format(TotalNota, "currency"), FonteNormal, Brushes.Red, MargemEsquerda + 500, MargemInferior - 20, New StringFormat())
e.Graphics.DrawLine(Pens.Black, MargemEsquerda, MargemInferior, MargemDireita, MargemInferior)
e.Graphics.DrawString(System.DateTime.Now, FonteRodape, Brushes.Black, MargemEsquerda, MargemInferior, New StringFormat())
e.Graphics.DrawString(TotalPaginas & " Paginas", FonteRodape, Brushes.Black, MargemDireita - 300, MargemInferior, New StringFormat())
'incrementa o número da página
PaginaAtual += 1
TotalPaginas = Ceiling(leitor.Tables(0).Rows.Count / LinhasPorPagina)
If (PaginaAtual <> TotalPaginas) Then
e.HasMorePages = True
Else
e.HasMorePages = False
End If
'captura qualquer Exception gerada durante o processamento
Catch exe As System.Exception
'se desejar, inclua código para tratamento das exceptions neste ponto
End Try
End Sub
Private Sub Impimir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Impimir.Click
'Dim visualForm As New VisualizarImprimir
'visualForm.ccodigo = codigoped.Text
'visualForm.ShowDialog()
Dim ccodigo As String = codigoped.Text
Dim objPrintPreview As PrintPreviewDialog
accDb.OpenConnection()
Dim PrintStringdetalhespedidos As String = "Select * from detalhespedidos where pedidoID= " & ccodigo & " order by produtoID"
leitor = accDb.ExecuteDS(PrintStringdetalhespedidos, TabelaDetalhesPedidos)
'ativa a ampulheta para indicar que há processamento em andamento.
Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
'Inicia o Loop através do DataReader para passar as informações para a rotina de impressão
'For i As Integer = 1 To leitor.Tables(0).Rows.Count
While (LinhaAtual < leitor.Tables(0).Rows.Count)
'criamos um novo Documento de Impressão
Dim pd As PrintDocument = New PrintDocument()
'estabelecemos a relação entre o novo objeto PrintDocument e o procedimento rptItensPedidos
AddHandler pd.PrintPage, AddressOf Me.rptItensPedidos
'************************************************************************************************'
'SE VOCÊ DESEJA ENVIAR O RELATÓRIO DIRETAMENTE PARA A IMPRESSORA BASTA REMOVER AS LINHAS ABAIXO '
'E INVOCAR O MÉTODO PRINT DO OBJETO PRINTDOCUMENT DESTA FORMA: pd.Print() ' '
'************************************************************************************************'
'criamos uma nova instância do objeto PrintPreviewDialog
objPrintPreview = New PrintPreviewDialog()
'atribuimos valores para algumas das propriedades do objeto
With objPrintPreview
.Document = pd 'informamos qual é o documento a ser visualizado
.WindowState = FormWindowState.Maximized 'inicia com a janela maximizada
.PrintPreviewControl.Zoom = 1 'inicia com o Zoom em 100%
.Text = "Impressão de Pedido" 'muda o título da janela de visualização
.ShowDialog() 'exibe a janela para o usuário
End With
End While
'next
'************************************************************************************************'
'PARA ENVIAR DIRETAMENTE PARA A IMPRESSORA: REMOVER ATÉ AQUI E INCLUIR pd.Print() '
'************************************************************************************************'
'restaura o cursor
Cursor.Current = System.Windows.Forms.Cursors.Default
End Sub
'FIM DO CARREGAMENTO DAS PROPRIEDADES E EVENTOS
End Class
Pergunta
Carlos Rocha
Impressão usando o System.Drawing.Printing
Ola pessoal!
Resolvi fazer o modelo do macorati de Impressão usando o System.Drawing.Printing, porem com dataset --> http://www.macoratti.net/vbn_prn2.htm
A paginação conta as paginas certinho mas exibe todos os registros na primeira folha e quando rolo para a segundfa folha, o print rola mas não tem dados.
Onde podee ser que estou errando?
Editado por Carlos RochaLink para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.