none
Imprimir dados

    Pergunta

  • Boas,

     

     Tenho um projecto em VB2005 Express com base de dados access. Os dados das diversas tabelas são manipulados em formularios mdi por Datagridview, tudo trabalha na perfeição mas tenho dúvidas para imprimir. Já pensei em exportar dados para o excel, criar reports no access e ultimamente utilizar o crystal reports, mas não tenho conhecimentos para nenhuma das opções.

     

     Agradeço ajuda.

    domingo, 5 de agosto de 2007 14:12

Respostas

Todas as Respostas

  • Boas Jorge,

    Usar o Crystal é uma boa opção, pois ele já vem integrado com o VS, mas vc poderia usar tb a classe System. Drawing do framework. Observe nos links como fazer.

     

    domingo, 5 de agosto de 2007 15:39
  • Daniel,

     

     Obrigado pela dica, vou optar pela classe System.Drawing.Printing e ver se resulta. Um abraço.

    domingo, 5 de agosto de 2007 18:26
  • Legal, poste o resultado depois.

    domingo, 5 de agosto de 2007 21:33
  • Boas,

     

     A pedido de muitas famílias aqui vai o código para imprimir dados utilizando a classe System.Drawing.Printing, com o DataReader, seja com DataGridView ou não. O código foi retirado dos artigos do Macoratti e do blog The Spoke, eu apenas baralhei e voltei a dar, aplicando ás minhas necessidades, o que para um aspirante a programador em part-time nem está nada mau, e mais importante...funciona. A base de dados é Access, uma tabela ( Produtos ), com 3 colunas ( Código, Produto e Origem ) , até á próxima...

     

    Imports System.Data

    Imports System.Data.OleDb

    Public Class Form1

        Private MyConnection As OleDbConnection

        Private Leitor As OleDbDataReader

        Private RelatorioTitulo As String

        Private PaginaAtual As String

        'Connection String da minha máquina

        Private Sub frmPrintDocumentDataReader_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

            MyConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Produtos.mdb")

        End Sub

        'Declara os métodos da impressão, através de um botão ( btnRelatório )

        Private Sub btnRelatorio_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRelatorio.Click

            RelatorioTitulo = "Relatório de Produtos "

            Dim pd As Printing.PrintDocument = New Printing.PrintDocument()

            AddHandler pd.PrintPage, New Printing.PrintPageEventHandler(AddressOf Me.pdRelatorios_PrintPage)

            AddHandler pd.BeginPrint, New Printing.PrintEventHandler(AddressOf Me.Begin_Print)

            AddHandler pd.EndPrint, New Printing.PrintEventHandler(AddressOf Me.End_Print)

            Dim objPrintPreview As New PrintPreviewDialog

            Try

                With objPrintPreview

                    .Document = pd

                    .WindowState = FormWindowState.Maximized

                    .PrintPreviewControl.Zoom = 1

                    .Text = "Catálogo de Produtos"

                    .ShowDialog()

                End With

            Catch ex As Exception

                MessageBox.Show(ex.ToString())

            End Try

        End Sub

        'A conexão e o DataReader é aberto aqui

        Private Sub Begin_Print(ByVal sender As Object, ByVal e As Printing.PrintEventArgs)

            Dim Sql As String = "SELECT Codigo,Produto,Origem from Produtos"

            Dim MyComand As New OleDbCommand(Sql, MyConnection)

            MyConnection.Open()

            Leitor = MyComand.ExecuteReader()

            PaginaAtual = 1

        End Sub

        'Layout da(s) página(s) a imprimir

        Private Sub pdRelatorios_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)

            'Variáveis das linhas

            Dim LinhasPorPagina As Single = 0

            Dim PosicaoDaLinha As Single = 0

            Dim LinhaAtual As Integer = 0

            'Variáveis das margens

            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)

            Dim codigoProduto As Integer

            Dim nomeProduto As String

            Dim origemProduto As String

            'Variáveis das fontes

            Dim FonteNegrito As Font

            Dim FonteTitulo As Font

            Dim FonteSubTitulo As Font

            Dim FonteRodape As Font

            Dim FonteNormal As Font

            FonteNegrito = New Font("Arial", 9, FontStyle.Bold)

            FonteTitulo = New Font("Arial", 15, FontStyle.Bold)

            FonteSubTitulo = New Font("Arial", 12, FontStyle.Bold)

            FonteRodape = New Font("Arial", 8)

            FonteNormal = New Font("Arial", 9)

     

            LinhaAtual = 0

            'Cabeçalho

            e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, 60, MargemDireita, 60)

            e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, 160, MargemDireita, 160)

            e.Graphics.DrawString("Lista de Produtos", FonteTitulo, Brushes.Blue, MargemEsquerda + 350, 80, New StringFormat())

            'Imagem

            e.Graphics.DrawImage(Image.FromFile("C:\" & "Produtos.jpg"), 100, 68)

            e.Graphics.DrawString(RelatorioTitulo & System.DateTime.Today, FonteSubTitulo, Brushes.Black, MargemEsquerda + 190, 120, New StringFormat())

            e.Graphics.DrawString("Código", FonteNegrito, Brushes.Black, MargemEsquerda, 170, New StringFormat())

            e.Graphics.DrawString("Produto", FonteNegrito, Brushes.Black, MargemEsquerda + 100, 170, New StringFormat())

            e.Graphics.DrawString("Origem", FonteNegrito, Brushes.Black, MargemEsquerda + 500, 170, New StringFormat())

            e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, 190, MargemDireita, 190)

            LinhasPorPagina = e.MarginBounds.Height / FonteNormal.GetHeight(e.Graphics) - 9

            'Aqui são lidos os dados

            While (LinhaAtual < LinhasPorPagina AndAlso Leitor.Read())

                codigoProduto = Leitor.GetInt32(0)

                nomeProduto = Leitor.GetString(1)

                origemProduto = Leitor.GetString(2)

                PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNormal.GetHeight(e.Graphics))

                e.Graphics.DrawString(codigoProduto.ToString(), FonteNormal, Brushes.Black, MargemEsquerda, PosicaoDaLinha, New StringFormat())

                e.Graphics.DrawString(nomeProduto, FonteNormal, Brushes.Black, MargemEsquerda + 100, PosicaoDaLinha, New StringFormat())

                e.Graphics.DrawString(origemProduto.ToString(), FonteNormal, Brushes.Black, MargemEsquerda + 500, PosicaoDaLinha, New StringFormat())

                LinhaAtual += 1

            End While

            'Rodapé

            e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, MargemInferior, MargemDireita, MargemInferior)

            e.Graphics.DrawString(System.DateTime.Now.ToString(), FonteRodape, Brushes.Black, MargemEsquerda, MargemInferior, New StringFormat())

            e.Graphics.DrawString("Página : " & PaginaAtual, FonteRodape, Brushes.Black, MargemDireita - 50, MargemInferior, New StringFormat())

            'Incrementa o número da página

            PaginaAtual += 1

     

            If (LinhaAtual > LinhasPorPagina) Then

                e.HasMorePages = True

            Else

                e.HasMorePages = False

            End If

        End Sub

        'Encerra a conexão e o DataReader

        Private Sub End_Print(ByVal sender As Object, ByVal byvale As Printing.PrintEventArgs)

            Leitor.Close()

            MyConnection.Close()

        End Sub

     

    terça-feira, 7 de agosto de 2007 22:03
  • Valeu Jorge!

    Parabéns pelo sucesso e obrigado por compartilhar a informação!

    terça-feira, 7 de agosto de 2007 23:22
  • Ola pessoal.

    Segui as instruções do colega Jorge no post http://forums.microsoft.com/MSDN-BR/ShowPost.aspx?PostID=1964604&SiteID=21&pageid=0, sobre a impressão no PrintDocumet e deu quase tudo correto.

    Porem, só deu uma coisa errada:

    Não esta contabilizando o numero de paginas.

     Será que alguem pode me ajudar?

    Eu pus como 4 linhas por pagina e ele mostra as 4 linhas e não mostra mais. Porem, o registro tem mais linhas e não mostra mais a segunda folha dizendo que só tem uma follha.

    Onde será que esta o erro?

    segunda-feira, 5 de janeiro de 2009 19:03
  • Carcleo,

     

     Escreva aí um exemplo do seu código, pode ser que consiga ajudar.

     

    Abraços

     

    segunda-feira, 5 de janeiro de 2009 19:40
  •  

    Ok.

    Tai o código que to usando:

     

    Code Snippet

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

    Public Class Pedidos
        '
        'Recuros da Paginação
        Dim leitor As MySqlDataReader
        Private PaginaAtual As Integer = 1
        Private TotalPaginas As Integer
        Dim TotalNota As Integer
        Dim totalLinhas As Long
        Dim conexao As New MySqlConnection
        Private RelatorioTitulo As String


        Private Sub Begin_Print(ByVal sender As Object, ByVal e As Printing.PrintEventArgs)
            Dim strConnString As String = "server=localhost;userid=root;password=;database=Vendas"
            conexao = New MySqlConnection(strConnString)
            conexao.Open()
            Dim ccodigo As String = codigoped.Text
            '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()
            PaginaAtual = 1
        End Sub

        Private Sub Impimir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Impimir.Click
            RelatorioTitulo = "Impressão de pedido "
            Dim pd As Printing.PrintDocument = New Printing.PrintDocument()
            AddHandler pd.PrintPage, New Printing.PrintPageEventHandler(AddressOf Me.pdRelatorios_PrintPage)
            AddHandler pd.BeginPrint, New Printing.PrintEventHandler(AddressOf Me.Begin_Print)
            AddHandler pd.EndPrint, New Printing.PrintEventHandler(AddressOf Me.End_Print)
            Dim objPrintPreview As New PrintPreviewDialog
            Try
                With objPrintPreview
                    .Document = pd
                    .WindowState = FormWindowState.Maximized
                    .PrintPreviewControl.Zoom = 1
                    .Text = "Catálogo de Produtos"
                    .ShowDialog()
                End With
            Catch ex As Exception
                MessageBox.Show(ex.ToString())
            End Try
        End Sub
        Private Sub pdRelatorios_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
            'Variáveis das linhas
            Dim LinhasPorPagina As Single = 0
            Dim PosicaoDaLinha As Single = 0
            Dim LinhaAtual As Integer = 0
            'Variáveis das margens
            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)
            Dim produtoID As Integer
            Dim unidade As String
            Dim descricao As String
            Dim preco As Integer
            Dim quantidade As Integer
            Dim subtotal As Integer

            'Variáveis das fontes
            Dim FonteNegrito As Font
            Dim FonteTitulo As Font
            Dim FonteSubTitulo As Font
            Dim FonteRodape As Font
            Dim FonteNormal As Font
            FonteNegrito = New Font("Arial", 9, FontStyle.Bold)
            FonteTitulo = New Font("Arial", 15, FontStyle.Bold)
            FonteSubTitulo = New Font("Arial", 12, FontStyle.Bold)
            FonteRodape = New Font("Arial", 8)
            FonteNormal = New Font("Arial", 9)

            LinhaAtual = 0
            'Cabeçalho
            '*******************************************
            '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)

            'Aqui são lidos os dados
            'LinhasPorPagina = e.MarginBounds.Height / FonteNormal.GetHeight(e.Graphics) - 9
            LinhasPorPagina = 4

            While (LinhaAtual < LinhasPorPagina AndAlso leitor.Read())
                produtoID = leitor("produtoID")
                unidade = leitor("unidade")
                descricao = leitor("descricao")
                preco = leitor("preco")
                quantidade = leitor("quantidade")
                subtotal = leitor("subtotal")

                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(preco, 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
            End While
            'Rodapé
            e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, MargemInferior, MargemDireita, MargemInferior)
            e.Graphics.DrawString(System.DateTime.Now.ToString(), FonteRodape, Brushes.Black, MargemEsquerda, MargemInferior, New StringFormat())
            e.Graphics.DrawString("Página : " & PaginaAtual, FonteRodape, Brushes.Black, MargemDireita - 50, MargemInferior, New StringFormat())
            'Incrementa o número da página

            PaginaAtual += 1

            If (LinhaAtual > LinhasPorPagina) Then
                e.HasMorePages = True
            Else
                e.HasMorePages = False
            End If
        End Sub
        Private Sub End_Print(ByVal sender As Object, ByVal byvale As Printing.PrintEventArgs)
            leitor.Close()
            conexao.Close()
        End Sub
        'FIM DO CARREGAMENTO DAS PROPRIEDADES E EVENTOS
    End Class

     

     


    segunda-feira, 5 de janeiro de 2009 20:48
  •  

    Bom,consegui fazer.

    Só, que da forma que consegui, o PrintDocumento esta sendo criado no form de Pedidos e eu queria cria-lo em um outro form. Como faria isso?

     

    veja como esta Codigo:

     

     

    Code Snippet

    ql.Data.MySqlClient

    Imports System.Text.RegularExpressions

    Imports System.Math

    Imports System.Drawing.Printing

    Public Class Pedidos

    'INICIO DAS DECLARAES DAS VARIAVEIS GLOBAIS

    Inherits System.Windows.Forms.Form

    Dim accDb As New DBConnection

    Dim registrocliente As Integer

    Dim registroproduto As Integer

    Dim registroitem As Integer

    Dim registropedido As Integer

    Dim registropedidos As Integer

    Dim Proximopedido As New Integer

    Dim ds As DataSet = Nothing

    Dim ds_itens As DataSet = Nothing

    Dim ds_itens_temp As DataSet = Nothing

    Dim dt As DataTable

    Dim dr As DataRow

    Dim TabelaClientes As String = "clientes"

    Dim TabelaProdutos As String = "produtos"

    Dim TabelaPedidos As String = "pedidos"

    Dim TabelaDetalhesPedidos As String = "detalhespedidos"

    'FIM DAS DECLARAES DAS VARIAVEIS GLOBAIS

    ''''''''''''''''''''''''''''''''''''''''''

    'INICIO DAS FUNES E PROCIDURES

     

    '#############################AQUI VAI TODO O CÓDIGO DO FORM DE PEDIIDOS#################

    '#############################POR ISSO É QUE QUERIA JOGAR A PAGINAÇÃO DO PINTDOCUMENT PARA OUTRO FORM#################

     

    'RECURSOS DA PAGINAÇÃO

    Private RelatorioTitulo As String

    Dim leitor As MySqlDataReader

    Private PaginaAtual As Integer = 1

    Private TotalPaginas As Integer

    Dim TotalNota As Integer

    Dim totalLinhas As Long

    Dim ccodigo As Integer

    Dim conexao As New MySqlConnection

    Private Sub Impimir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Impimir.Click

    RelatorioTitulo = "Impresso de pedido "

    Dim pd As Printing.PrintDocument = New Printing.PrintDocument()

    AddHandler pd.PrintPage, New Printing.PrintPageEventHandler(AddressOf Me.pdRelatorios_PrintPage)

    AddHandler pd.BeginPrint, New Printing.PrintEventHandler(AddressOf Me.Begin_Print)

    AddHandler pd.EndPrint, New Printing.PrintEventHandler(AddressOf Me.End_Print)

    Dim objPrintPreview As New PrintPreviewDialog

    Try

    With objPrintPreview

    .Document = pd

    .WindowState = FormWindowState.Maximized

    .PrintPreviewControl.Zoom = 1

    .Text = "Catlogo de Produtos"

    .ShowDialog()

    End With

    Catch ex As Exception

    MessageBox.Show(ex.ToString())

    End Try

    End Sub

    Private Sub Begin_Print(ByVal sender As Object, ByVal e As Printing.PrintEventArgs)

    ccodigo = codigoped.Text

    Dim strConnString As String = "server=localhost;userid=root;password=;database=Vendas"

    conexao = 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()

    PaginaAtual = 1

    End Sub

    Private Sub pdRelatorios_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)

    '''''código da paginação não esta cabendo aqui neste post

    PaginaAtual += 1

    TotalPaginas = Ceiling(totalLinhas / LinhasPorPagina)

    If (PaginaAtual <= TotalPaginas) Then

    e.HasMorePages = True

    Else

    e.HasMorePages = False

    End If

    End Sub

    Private Sub End_Print(ByVal sender As Object, ByVal byvale As Printing.PrintEventArgs)

    leitor.Close()

    conexao.Close()

    End Sub

    'FIM DO CARREGAMENTO DAS PROPRIEDADES E EVENTOS

    End Class

     

     

    terça-feira, 6 de janeiro de 2009 14:12
  • Carlos,

     

    Peço desculpa pela demora, mas tenho andado bastante ocupado. Muito rapidamente...

     

    Para controlar o número de linhas por página :

     

    LinhasPorPagina = e.MarginBounds.Height / FonteNormal.GetHeight(e.Graphics) – 9 ß---

     

     Por exemplo se em vez de -9 for -18, vais retirar um total de 18 linhas na página a contar margem inferior.

     

    No teu exemplo “ LinhasPorPagina = 4 “ é gambiarra, eliminado o valor da linha acima.

     

     Uma folha pode ter 10 linhas como pode ter 100 linhas, depende também do espaço entre cada linha. É aqui que controlas esse espaço :

     

    PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNormal.GetHeight(e.Graphics)) + 100

     

    Por exemplo se em vez de Fonte Normal ( Arial 9 ), fosse Font 15, o espaço entre linhas seria maior.

     

    “...Só, que da forma que consegui, o PrintDocumento esta sendo criado no form de Pedidos e eu queria cria-lo em um outro form...”

     

    Julgo que estejas a falar do PrintPreviewControl, que é um form próprio da impressão onde aparecem os dados desenhados e que também podes manipular, fazer aparecer ou não, por exemplo, para imprimir directamente sem aparecer este form :

     

    With objPrintPreview

    .Document = pd

    .WindowState = FormWindowState.Maximized  ß-- Retirar

    .PrintPreviewControl.Zoom = 1 ß-- Retirar

    .Text = "Catlogo de Produtos"

    .ShowDialog() ß-- Retirar

    Pd.print() ß-- Incluir esta linha

    End With

     

     O PrintPreviewControl é um tipo de form independente, não é criado em nenhum outro form.

     

     Abraços

     

    quinta-feira, 8 de janeiro de 2009 03:52
  •  

    Bom.

     

    Mas, se eu retirrar o show dialog, ele continua dando os botões de zoom, print,e os outros controles?

     

    A proposito. Como faço para exibir a caixa que me permite alterar as opções da impresssora (ou escolhe-la) en vez de jogar direto nela?

    quinta-feira, 8 de janeiro de 2009 09:09
  • Se retirar o ShowDialog e acrescentar PD.Print, o form não aparece e imprime directamente.

     

    Para selecionar a impressora é arrastar para o form o componente PrintDialog e fazer algumas alterações, veja este exemplo :

     

    http://www.macoratti.net/08/04/vbn8_imp.htm

     

    Abraços

     

    sexta-feira, 9 de janeiro de 2009 03:30
  •  

    Ok.

    A situação mudou um pouco o seu quadro agora.

    Bom, acontece, que para imprimir um pedido no PrinDoicumet com os seus ítens, atraves da ajuda de voces eu consegui.

    O problema agora é que o cliente ta querendo o seguinte:

    Um relatório que lista todos os pedidos de um período a ser escolhido pelo cliente numa datatimepicker.

    O sql? Tranquilo.Ja fiz!

    Cada pedido do cliente nunca passa de 5 ítens de pedido, na maioria 2 por se tratar de poucos produtos que ele trabalha.

     

    Fiz um código que lê os pedidos com datareader (leitor) num wile. Dentro desse wile puz um foreach para pegar cada uma vez que esse wile recebe um numero de pedido e faço uma consulta usando um dataset para ver quais são os ítens desse pedido e listo os ítens desse pedido.

     

    O que eu preciso:

     

    Fiz um gabiarra, partindo do principio de que cada pedido não passa de 5 ítens e cada linha com 20 pixeus de altura, puz cada linha do wile com 20 pixeus e incremenei 20 pixeus a cada linha após a exibição dos dados do pedido, não dos tens.

    Acontece, que se um determinado pedido tiver por exemplo 07 ítens, ai eu caio no mato pois na hora de exibir o último pdido dele, sera mostrado sobreposto os dados do proximo pedido.

     

    Como resolvo isso?

    veja a figura logo abaixo:

     

    'LinhasPorPagina = e.MarginBounds.Height / FonteNormal.GetHeight(e.Graphics) - 10

    LinhasPorPagina = 2

    PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNormal.GetHeight(e.Graphics)) + 100

    While (LinhaAtual < LinhasPorPagina AndAlso leitor.Read())

    pedidoID = leitor("pedidoID")

    clienteID = leitor("clienteID")

    nomecli = leitor("nome")

    e.Graphics.DrawString(clienteID, FonteNormal, Brushes.Red, MargemEsquerda, PosicaoDaLinha, New StringFormat())

    e.Graphics.DrawString(clienteID, FonteNormal, Brushes.Red, MargemEsquerda + 50, PosicaoDaLinha, New StringFormat())

    e.Graphics.DrawString(nomecli, FonteNormal, Brushes.Red, MargemEsquerda + 100, PosicaoDaLinha, New StringFormat())

    Dim PosicaoDaLinhaDS As Integer = PosicaoDaLinha

    Dim PrintStringdetalhespedidos2 As String = "Select * from detalhespedidos where pedidoID= " & leitor("pedidoID")

    Dim item As DataSet = accDb.ExecuteDS(PrintStringdetalhespedidos2, "detalhespedidos")

    For Each linhaDS As DataRow In item.Tables(0).Rows

    produtoID = linhaDS("produtoID")

    descricao = linhaDS("descricao")

    quantidade = linhaDS("quantidade")

    unidade = linhaDS("unidade")

    preco = linhaDS("preco")

    subtotal = linhaDS("subtotal")

    'condicao = linha("condicao")

    'total += subtotal

    'condicao = linha("condicao")

    e.Graphics.DrawString(produtoID, FonteNormal, Brushes.Red, MargemEsquerda + 300, PosicaoDaLinhaDS, New StringFormat())

    e.Graphics.DrawString(descricao, FonteNormal, Brushes.Red, MargemEsquerda + 350, PosicaoDaLinhaDS, New StringFormat())

    e.Graphics.DrawString(quantidade, FonteNormal, Brushes.Red, MargemEsquerda + 500, PosicaoDaLinhaDS, New StringFormat())

    e.Graphics.DrawString(preco, FonteNormal, Brushes.Red, MargemEsquerda + 550, PosicaoDaLinhaDS, New StringFormat())

    e.Graphics.DrawString(subtotal, FonteNormal, Brushes.Red, MargemEsquerda + 600, PosicaoDaLinhaDS, New StringFormat())

    'e.Graphics.DrawString(condicao, FonteNormal, Brushes.Red, MargemEsquerda + 450, PosicaoDaLinhaDS, New StringFormat())

    'e.Graphics.DrawString(total, FonteNormal, Brushes.Red, MargemEsquerda + 450, PosicaoDaLinhaDS, New StringFormat())

    PosicaoDaLinhaDS += 20

    Next linhaDS

    PosicaoDaLinha += 100

    LinhaAtual += 1

    End While

    TotalPaginas = Ceiling(totalLinhas / LinhasPorPagina)

     

     

    sexta-feira, 9 de janeiro de 2009 10:53
  • Como usar o mesmo com um Banco SQL????

    Obrigado


    Wesley Sozua
    segunda-feira, 19 de dezembro de 2011 15:57