Carcleo 4 Denunciar post Postado Dezembro 28, 2008 Ola pessoal. Estou usando printpreview para imprimir um relatório de Pedido Estou traçando duas linhas horizontais paralelas para colocação do cabeçalho de pedido, depois, Estou traçando duas linhas horizontais paralelas para colocação do cabeçalho dos ítens do pedido tipo Produto, descriçao valor Para listar os ítens, fiz um loop para indicar a altura que cada um dos ítens do pedido, que é de 20 em 20 pixeus e depois que eu peguei a altura da última linha entreguei o seu valor para a altura da linha após a listagem dos ítens Ficou assim: e.Graphics.DrawLine(Pens.Black, margemEsq, 260, margemDir, 260) e.Graphics.DrawString("Cód.", fonteColuna, Brushes.Red, margemEsq, 260, New StringFormat()) e.Graphics.DrawString("Unid.", fonteColuna, Brushes.Red, margemEsq + 50, 260, New StringFormat()) e.Graphics.DrawString("Descrição", fonteColuna, Brushes.Red, margemEsq + 100, 260, New StringFormat()) e.Graphics.DrawString("Preço", fonteColuna, Brushes.Red, margemEsq + 350, 260, New StringFormat()) e.Graphics.DrawString("Qtde", fonteColuna, Brushes.Red, margemEsq + 450, 260, New StringFormat()) e.Graphics.DrawString("Total", fonteColuna, Brushes.Red, margemEsq + 550, 260, New StringFormat()) e.Graphics.DrawLine(Pens.Black, margemEsq, 280, margemDir, 280) Dim u As Integer = 290 For Each linha As DataRow In DRDP.Tables(0).Rows e.Graphics.DrawString(linha.Item("produtoID"), fonteColuna, Brushes.Black, margemEsq, u, New StringFormat()) e.Graphics.DrawString(linha.Item("unidade"), fonteColuna, Brushes.Black, margemEsq + 50, u, New StringFormat()) e.Graphics.DrawString(linha.Item("descricao"), fonteColuna, Brushes.Black, margemEsq + 100, u, New StringFormat()) e.Graphics.DrawString(linha.Item("preco"), fonteColuna, Brushes.Black, margemEsq + 350, u, New StringFormat()) e.Graphics.DrawString(linha.Item("quantidade"), fonteColuna, Brushes.Black, margemEsq + 450, u, New StringFormat()) e.Graphics.DrawString(linha.Item("subtotal"), fonteColuna, Brushes.Black, margemEsq + 550, u, New StringFormat()) TotalNota += linha.Item("subtotal") u += 20 Next linha e.Graphics.DrawLine(Pens.Black, margemEsq, u + 10, margemDir, u + 10) e.Graphics.DrawString("Total da Nota", fonteColuna, Brushes.Red, margemEsq + 350, u + 20, New StringFormat()) e.Graphics.DrawString(Format(TotalNota, "currency"), fonteColuna, Brushes.Red, margemEsq + 500, u + 20, New StringFormat()) e.Graphics.DrawLine(Pens.Black, margemEsq, u + 40, margemDir, u + 40) ... e agora vem os problemas: 1) Bom, agora como fazer uma paginação nestes ítens para não colocar o rodapé da primeira pagina la na pagina seguinte? 2) No código abaixo, eu coloco uma figura no printpreview mas estou indicando o caminho completo da figura no windows. Eu não quero indicar o caminho completo e sim só a pasta onde esta a figura: e.Graphics.DrawImage(Image.FromFile("D:\Trabalhos Novos\Visual Studio 2008\Projects\vendas\imagens\" & "maco10.gif"), 100, 68)eu queria assim: Image.FromFile("\imagens\" & "maco10.gif). Tem jeito?3) Na hora de dar o total da nota, ele esta somando todos os ítenms certo mas esta arredondando o resultado veja: Format(TotalNota, "currency")Como resolver isso?4) Tenho uma NumericUpDown para aumentar e diminuir o tamanho do preview e tenho dois buttons que a ideia seria clikar num para mover a NumericUpDown para baixo (Diminuir o zoom)e clikar noutro para mover a NumericUpDown para cima (aumentar o zoom) Que código usa para isso nos botoes? Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 30, 2008 Bom olhando uma paginma php que fiz para a internet, visualizando a logica, consdegui chegar à paginação no desktop. Mas agora, preciso faazer via código dois botões e colocalos no PRITPREVIEW para navegaçao entre as paginas AVANÇAR E RETROCEDER OU então arranjar uma frorma de poder clikar nos numeros das paginas. Eis como ficou: inicio = pagina * lpp PrintStringdetalhespedidos = "Select * from detalhespedidos where pedidoID= " & ccodigo DRDP = accDb.ExecuteDS(PrintStringdetalhespedidos, TabelaDetalhesPedidos) conta = DRDP.Tables(0).Rows.Count lpp = 3 paginas = Round(conta / lpp) pagina = 0 If IsDBNull(pagina) Then pagina = 1 If pagina > 0 Then menos = pagina - 1 e.Graphics.DrawString("Pag. " & pagina.ToString, fonteRodape, Brushes.Black, margemDir - 50, margemInf, New StringFormat()) pagina += 1 ' Anterior End If For i As Integer = 0 To paginas i += i e.Graphics.DrawString("Pag. " & i.ToString, fonteRodape, Brushes.Black, margemDir - 50, margemInf, New StringFormat()) Next If pagina < (paginas - 1) Then mais = pagina + 1 e.Graphics.DrawString("Pag. " & pagina.ToString, fonteRodape, Brushes.Black, margemDir - 50, margemInf, New StringFormat()) End If inicio = pagina * lpp PrintStringdetalhespedidos2 = "Select * from detalhespedidos where pedidoID= " & ccodigo & " LIMIT " & inicio & " , " & lpp DRDP2 = accDb.ExecuteDS(PrintStringdetalhespedidos2, TabelaDetalhesPedidos) If conta = 0 Then e.Graphics.DrawString("Ainda no h devedores cadastrados para esta empresa", fonteColuna, Brushes.Black, margemEsq, 500, New StringFormat()) Else e.Graphics.DrawLine(Pens.Black, margemEsq, 260, margemDir, 260) e.Graphics.DrawString("Cd.", fonteColuna, Brushes.Red, margemEsq, 260, New StringFormat()) e.Graphics.DrawString("Unid.", fonteColuna, Brushes.Red, margemEsq + 50, 260, New StringFormat()) e.Graphics.DrawString("Descrio", fonteColuna, Brushes.Red, margemEsq + 100, 260, New StringFormat()) e.Graphics.DrawString("Preo", fonteColuna, Brushes.Red, margemEsq + 350, 260, New StringFormat()) e.Graphics.DrawString("Qtde", fonteColuna, Brushes.Red, margemEsq + 450, 260, New StringFormat()) e.Graphics.DrawString("Total", fonteColuna, Brushes.Red, margemEsq + 550, 260, New StringFormat()) e.Graphics.DrawLine(Pens.Black, margemEsq, 280, margemDir, 280) Dim u As Integer = 290 For Each linha As DataRow In DRDP2.Tables(0).Rows e.Graphics.DrawString(linha.Item("produtoID"), fonteColuna, Brushes.Black, margemEsq, u, New StringFormat()) e.Graphics.DrawString(linha.Item("unidade"), fonteColuna, Brushes.Black, margemEsq + 50, u, New StringFormat()) e.Graphics.DrawString(linha.Item("descricao"), fonteColuna, Brushes.Black, margemEsq + 100, u, New StringFormat()) e.Graphics.DrawString(linha.Item("preco"), fonteColuna, Brushes.Black, margemEsq + 350, u, New StringFormat()) e.Graphics.DrawString(linha.Item("quantidade"), fonteColuna, Brushes.Black, margemEsq + 450, u, New StringFormat()) e.Graphics.DrawString(linha.Item("subtotal"), fonteColuna, Brushes.Black, margemEsq + 550, u, New StringFormat()) TotalNota += linha.Item("subtotal") u += 20 Next linha End If e.Graphics.DrawLine(Pens.Black, margemEsq, margemInf, margemDir, margemInf) ' aqui eu tento criar os botões: Private WithEvents Avanca As New Button Private WithEvents Volta As New Button With Avanca .Text = "Avana" .Location = New Point(margemDir - 300, margemInf) End With With Volta .Text = "Volta" .Location = New Point(margemDir - 300, margemInf) End With With PrintDocument1 '.Controls.Add(Avana) '.Controls.Add(Volta) End With 'e.Graphics.draw() e.Graphics.DrawString(System.DateTime.Now, fonteRodape, Brushes.Black, margemEsq, margemInf, New StringFormat()) Resolvi tambem a questão do diretório da imagem que ficou assim:(criar a pasta imagem no diretório da aplicação e.Graphics.DrawImage(Image.FromFile("imagens\" & "maco10.gif"), 100, 68)Agora só falta resolver o problema do Format(TotalNota, "currency") que Na hora de dar o total da nota, ele esta somando todos os ítenms certo mas esta arredondando o resultado e aq questão abaixo;Tenho uma NumericUpDown para aumentar e diminuir o tamanho do preview e tenho dois buttons que a ideia seria clikar num para mover a NumericUpDown para baixo (Diminuir o zoom)e clikar noutro para mover a NumericUpDown para cima (aumentar o zoom) Que código usa para isso nos botoes? Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Dezembro 30, 2008 Por que não utiliza um gerador de relatório? Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 30, 2008 Basicamente or que esta tudo pronto. só falta paginar Bom, talves isso possa ajudar entender melhor o quadro: No meu form de Cadastro de pedidos, eu tenho um Botão IMPRIMIR que no seu evento clike tem: 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() End SubTrata-se de impressão de pedido através do PrintDocument usando System.Drawing.Printing O Onclik do botão imprimir no Form de pedidos, envia oa PrintDocument o código do pedido para, chegando la, prencher o valor da variavel ccodigo. Dai em diante, todoas as consultas são feitas na hora de exibir o print document que não é uma caixa de dialogo mas sim um form criado o VB. Bom, chegando la no form do print document, coinsigo fazer todas as consultas. Consulto e retorno os dados do pedido tipo Cliente, endereços, etc.. Consulto e retorno os ítens do pedido tipo poduto, unidade, valor unitario, total. Tudo certinho. Mas, na gora de fazer a paginação desses ítens que as vezes pode chegar a mais de 40 por pagina, aí não consigo fazer. Isso é imprtante. Vou colocar até aonde condegui fazer seguindo o modelo(lógica) do php. Mas, na hora de passar da primeira agina para a segunda, vou clikar onde???????????????????? Num estu conseguindo PrintStringdetalhespedidos = "Select * from detalhespedidos where pedidoID= " & ccodigo DRDP = accDb.ExecuteDS(PrintStringdetalhespedidos, TabelaDetalhesPedidos) conta = DRDP.Tables(0).Rows.Count lpp = 2 paginas = Ceiling(conta / lpp) pagina = 0 Dim posicao As Integer = margemDir - 100 For i As Integer = 1 To paginas e.Graphics.DrawString("Pag. " & i.ToString, fonteRodape, Brushes.Black, posicao, margemInf, New StringFormat()) posicao -= 50 Next inicio = pagina * lpp PrintStringdetalhespedidos2 = "Select * from detalhespedidos where pedidoID= " & ccodigo & " LIMIT " & inicio & " , " & lpp DRDP2 = accDb.ExecuteDS(PrintStringdetalhespedidos2, TabelaDetalhesPedidos) If conta = 0 Then e.Graphics.DrawString("Ainda não há devedores cadastrados para esta empresa", fonteColuna, Brushes.Black, margemEsq, 500, New StringFormat()) Else e.Graphics.DrawLine(Pens.Black, margemEsq, 260, margemDir, 260) e.Graphics.DrawString("Cód.", fonteColuna, Brushes.Red, margemEsq, 260, New StringFormat()) e.Graphics.DrawString("Unid.", fonteColuna, Brushes.Red, margemEsq + 50, 260, New StringFormat()) e.Graphics.DrawString("Descrição", fonteColuna, Brushes.Red, margemEsq + 100, 260, New StringFormat()) e.Graphics.DrawString("Preço", fonteColuna, Brushes.Red, margemEsq + 350, 260, New StringFormat()) e.Graphics.DrawString("Qtde", fonteColuna, Brushes.Red, margemEsq + 450, 260, New StringFormat()) e.Graphics.DrawString("Total", fonteColuna, Brushes.Red, margemEsq + 550, 260, New StringFormat()) e.Graphics.DrawLine(Pens.Black, margemEsq, 280, margemDir, 280) Dim u As Integer = 290 For Each linha As DataRow In DRDP2.Tables(0).Rows e.Graphics.DrawString(linha.Item("produtoID"), fonteColuna, Brushes.Black, margemEsq, u, New StringFormat()) e.Graphics.DrawString(linha.Item("unidade"), fonteColuna, Brushes.Black, margemEsq + 50, u, New StringFormat()) e.Graphics.DrawString(linha.Item("descricao"), fonteColuna, Brushes.Black, margemEsq + 100, u, New StringFormat()) e.Graphics.DrawString(linha.Item("preço"), fonteColuna, Brushes.Black, margemEsq + 350, u, New StringFormat()) e.Graphics.DrawString(linha.Item("quantidade"), fonteColuna, Brushes.Black, margemEsq + 450, u, New StringFormat()) e.Graphics.DrawString(linha.Item("subtotal"), fonteColuna, Brushes.Black, margemEsq + 550, u, New StringFormat()) TotalNota += linha.Item("subtotal") u += 20 Next linha End If e.Graphics.DrawLine(Pens.Black, margemEsq, margemInf - 30, margemDir, margemInf - 30) e.Graphics.DrawString("Total da Nota", fonteColuna, Brushes.Red, margemEsq + 350, margemInf - 20, New StringFormat()) e.Graphics.DrawString(Format(TotalNota, "currency"), fonteColuna, Brushes.Red, margemEsq + 500, margemInf - 20, New StringFormat()) e.Graphics.DrawLine(Pens.Black, margemEsq, margemInf, margemDir, margemInf) e.Graphics.DrawString(System.DateTime.Now, fonteRodape, Brushes.Black, margemEsq, margemInf, New StringFormat()) e.Graphics.DrawString(paginas & " Paginas " , fonteRodape, Brushes.Black, margemDir - 300, margemInf, New StringFormat()) Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Dezembro 31, 2008 Bom pessoal. Alguem conhece uma forma de fazer paginação de resultados com através do PrintDocument usando System.Drawing.Printing? Mas não serve com datalist, datagrid, esses controles não! Preciso é de paginar(pagina 01,02...) quando os registros são mostrados em um form Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Janeiro 1, 2009 Meu problema é o seguinte: Vejam a figura abaixo: Preciso arranjar uma forma de criar um botão na area branca ao lado(não na area que iaa para a impressora) que esse botão ao ser clikado, mostra o numero da pagina que se quer visualizar e este valor alimentar a variavel paginadavez que esta dentro da : Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage Como fazer isso? Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Janeiro 5, 2009 Bom, resolovi fazer como no macoratti em:http://www.macoratti.net/vbn_prn2.htm Mas deu alguns problemas: 1) o Código faz a leitura, exibe o numero de registros por pagina certinho mas, as paginas que passam do numero de paginas necessarias paa exibir todos os registros, continuam sendo exibidas em branco. Coloquei 8 registros por pagina. da certinho. Primeiro pagina os 8 primeiros e na segunda os outros 5 ultimos registros. Mas, se clikar no botão vai para a terceira, quarta, n paginas em branco. isso com If (leitor("produtoID") <> Nothing) Then e.HasMorePages = True Else e.HasMorePages = False End If Por que se eu fizer assim, If (leitor("produtoID") =Nothing) Then e.HasMorePages = True Else e.HasMorePages = False End Ifele exibe a primeira pagina certo com os seus 8 registros e diz não ter mais paginas. só que se eu fechar o PrintDocument, ele abre ele de novo e mostra a segunda pagina com os outros 5 registros e, se eu insistir e fechar de novo ai ele fechja e não exibe pagina alguma.Como resolve isso? 2) Aqui neste cdódigo, estou fazendo o botão IMPRIMIR e o código do PrintDocumento todo na mesmo form, o form de pedidos. Mas eu queria era fazer o codigo do Print Docdument num form separado. Como fazer? Segue o código: Private Sub Impimir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Impimir.Click Dim ccodigo As String = codigoped.Text Dim objPrintPreview As PrintPreviewDialog Dim strConnString As String = "server=localhost;userid=root;password=;database=Vendas" Dim conexao As New MySqlConnection(strConnString) conexao.Open() 'pegando o numero total de linhas Dim PrintStringdetalhespedidoscount As String = "Select Count(*) from detalhespedidos where pedidoID= " & ccodigo & " order by produtoID" Dim cmdcount As New MySqlCommand(PrintStringdetalhespedidoscount, conexao) totalLinhas = CInt(cmdcount.ExecuteScalar()) Dim PrintStringdetalhespedidos As String = "Select * from detalhespedidos where pedidoID= " & ccodigo & " order by produtoID" Dim cmd As New MySqlCommand(PrintStringdetalhespedidos, conexao) leitor = cmd.ExecuteReader() 'Inicia o Loop através do DataReader para passar as informações para a rotina de impressão While leitor.Read() '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 rptClientesAtivos 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 do pedido" 'muda o título da janela de visualização .ShowDialog() 'exibe a janela para o usuário End With '**************************************************************************** ********************' 'PARA ENVIAR DIRETAMENTE PARA A IMPRESSORA: REMOVER ATÉ AQUI E INCLUIR pd.Print() ' '**************************************************************************** ********************' End While 'fecha o DataReader leitor.Close() 'fecha a conexão conexao.Close() 'restaura o cursor Cursor.Current = System.Windows.Forms.Cursors.Default End Sub 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 LinhaAtual As Integer = 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 '******************************** '******************************************* '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) '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 = 8 'ativamos o tratamento de erro Try 'alimentamos as variáveis com as informações do primeiro registro 'extraído do banco de dados através do objeto MySqlDataReader produtoID = leitor.GetInt32("produtoID").ToString unidade = leitor.GetString("unidade").ToString descricao = leitor.GetString("descricao").ToString preço = leitor.GetInt32("preço").ToString quantidade = leitor.GetInt32("quantidade").ToString subtotal = leitor.GetInt32("subtotal").ToString 'iniciamos o loop através dos registros do DataReader 'respeitando o número de linhas por página While (LinhaAtual < LinhasPorPagina AndAlso leitor.Read()) PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNormal.GetHeight(e.Graphics)) + 100 e.Graphics.DrawString(produtoID, FonteNormal, Brushes.Black, MargemEsquerda, PosicaoDaLinha, New StringFormat()) e.Graphics.DrawString(unidade, FonteNormal, Brushes.Black, MargemEsquerda + 50, PosicaoDaLinha, New StringFormat()) e.Graphics.DrawString(descricao, FonteNormal, Brushes.Black, MargemEsquerda + 100, PosicaoDaLinha, New StringFormat()) e.Graphics.DrawString(preço, FonteNormal, Brushes.Black, MargemEsquerda + 350, PosicaoDaLinha, New StringFormat()) e.Graphics.DrawString(quantidade, FonteNormal, Brushes.Black, MargemEsquerda + 450, PosicaoDaLinha, New StringFormat()) e.Graphics.DrawString(subtotal, FonteNormal, Brushes.Black, MargemEsquerda + 550, PosicaoDaLinha, New StringFormat()) LinhaAtual += 1 'verifica o número da linha atual para não ultrapassar o número de linhas por página If (LinhaAtual < LinhasPorPagina) Then produtoID = leitor.GetInt32("produtoID").ToString unidade = leitor.GetString("unidade").ToString descricao = leitor.GetString("descricao").ToString preço = leitor.GetInt32("preço").ToString quantidade = leitor.GetInt32("quantidade").ToString subtotal = leitor.GetInt32("subtotal").ToString End If TotalNota += leitor("subtotal") End While 'incrementa o número da página PaginaAtual += 1 If (leitor("produtoID") <> Nothing) 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 '***************************** '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()) TotalPaginas = Ceiling(totalLinhas / LinhasPorPagina) e.Graphics.DrawString(TotalPaginas & " Paginas", FonteRodape, Brushes.Black, MargemDireita - 300, MargemInferior, New StringFormat()) End Sub Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Janeiro 5, 2009 Cara essa dúvida não é a mesma desse tópico: http://forum.imasters.com.br/index.php?showtopic=323413 ??? Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Janeiro 5, 2009 Mas.. E a resposta? Porque não veio? Mas. não. não é o mesmo problema! La estava fazendo deum jeito e aqui mudei o jeito de fazer. Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Janeiro 5, 2009 Você mudou o jeito de fazer mas o assunto é o mesmo. Não fica criando tópicos pra chamar a atenção. Se não teve respostas é por que ninguém achou uma solução ainda. Do jeito que esta tentando fazer é inviável, acredito que ninguém ou quase ninguém trabalhe desta forma, por isso esta sem respostas. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Janeiro 5, 2009 Concordo contigo. Então por favor. Me da uma orientação mais avançada sob outra forma de fazer! Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Janeiro 6, 2009 Se os dados que você quer estão armazenados em um banco de dados, utiliza um gerador de relatório. Vou mesclar os dois tópicos. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites