Ir para conteúdo
Fórum Script Brasil

Carlos Rocha

Membros
  • Total de itens

    1.300
  • Registro em

  • Última visita

Tudo que Carlos Rocha postou

  1. Consegui o código abaixo, que abre um documento word modelo.doc, selciona tudo dele e salva em outro documento tambem .doc de nome modelo2.doc. Mas, eu quero é pegar o conteudo que esta sendo mostrado no Relatório do PrintDocument (PrintPreviewDialog) e salva-lo em no document .DOC chamado modelo2.doc. Como fazer isso? Private Sub MeuClickExportar(ByVal sender As Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) If e.ClickedItem.Text = "EXPORTAR .DOC" Then Dim word As Microsoft.Office.Interop.Word.Application word = CreateObject("Word.Application") 'Abre o documento word.Documents.Open("D:\Modelo.doc") 'não mostra o documento para usuario word.Visible = False 'Seleciona o documento inteiro word.Documents("Modelo.doc").Select() 'Salva o documento com um novo nome word.ActiveDocument.SaveAs("D:\Modelo2.doc") 'fecha o word word.Quit() 'Libera memoria word = Nothing End If End Sub
  2. Ola pessoal. Consegui, fazer e paginar um relatório com o PrintDocument. Agora, estando no PrintPreviewDialogo, preciso acrecentar um botão que salva (exporta) todas as paginas do relatório (no caso de mais de uma pagina) para um arquivo .doc. Mas não tenho a minima ídeia de como fazer isso!
  3. Resolvido. O problema esta na declaração da variaves,. estava como int e o certo seria double!
  4. Olá pessoal. Ai vai mais um probleminha com impressão com print Document. Bom, esta é o BeginPrint: Acontece que estou fazendo um wile no MySqlDataReader para listar os ítens do pedido. Só que quando vou listar valores com vírgula tipo dinheiro ou peso, o wile (sei la se é ele. Pelo menos acho que é!), tira a virgula e arredonda o valor. Tipo: leitor("valorunitario") = deveria retornar 2,36 e esta retornando 2 puro (e arredondando) leitor("peso") = deveria retornar 2,75 e esta retornando 3 puro (e arredondando) Onde estara meu erro? Private Sub Begin_Print(ByVal sender As Object, ByVal e As Printing.PrintEventArgs) If codigoped.Text <> "" Then ccodigo = codigoped.Text End If 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 Aqui, faço a leitura dos dados: While (LinhaAtual < LinhasPorPagina AndAlso leitor.Read()) produtoID = leitor("produtoID") unidade = leitor("unidade") descricao = leitor("descricao") preço = leitor("preço") 'preço = String.Format("{0:#.#0}", leitor("preço").ToString) 'tentativa que fiz que não deu certo quantidade = leitor("quantidade") subtotal = leitor("subtotal") 'subtotal = String.Format("{0:#.#0}", leitor("subtotal").ToString) 'tentativa que fiz que não deu certo 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 End While
  5. consegui desse jeito mas valeu: PrintStringdetalhespedidoscount = "select COUNT(*) from pedidos p inner join clientes c on p.clienteID = c.clienteID where p.ativo= 'S' and c.nome like '" & TBCliente.Text & "%'"
  6. Ola pessoal. tenho a seguinte consulta sql PrintStringdetalhespedidos = "select pedidoID, p.data, p.clienteID, c.nome as nome, p.ativo, entrega, cobranca, frete, PGTO, CondPgto from pedidos p inner join clientes c on p.clienteID = c.clienteID where p.ativo= 'S' and c.nome like '" & TBCliente.Text & "%'" Gostaria de fazer um select count nela. Não estou conseguindo. Como faz isso?
  7. 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") preço = linhaDS("preço") 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(preço, 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)
  8. A ideia é resolver esse problema: Cada linha dessas 2 correspondem a um pedido e se você observar bem, vera um garrancho à frente do primeiro pedido. isso é porque o primeiro pedido, tem 2 ítens e um sobrepos o outros ao passo que o segundo pedido só tem 1 ítem. Problema parece ser de laço! Queria é fazer que meostra-se todos os ítens de cada pedido e só depois que tdos os ítens de um pedido forem listados ai sim mostrar o segundo pedido. Isso respeitando a paginação dos pedidos. Veja:
  9. Ola! olha a furada que eu entrei nela. que troço dificil. não estou conseguindo e novamente recorro aos colegas. Estou terminando uma pequena aplicação windows para cadastar pedidos. Bom, acontece, que para imprimir o 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, já 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 le os pedidos com datareader (leitor) num wile. Dentro desse wilw puz outro wilw 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~çao os ítens desse pedido e usando um foreach listo os ítens desse pedido. Acontece que quando boto pra rodar o programa trava. eis o código: LinhasPorPagina = e.MarginBounds.Height / FonteNormal.GetHeight(e.Graphics) - 10 While (LinhaAtual < LinhasPorPagina AndAlso leitor.Read()) pedidoID = leitor("pedidoID") clienteID = leitor("clienteID") nomecli = leitor("nome") PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNormal.GetHeight(e.Graphics)) + 100 e.Graphics.DrawString(clienteID, FonteNormal, Brushes.Red, MargemEsquerda, PosicaoDaLinha, New StringFormat()) e.Graphics.DrawString(nomecli, FonteNormal, Brushes.Red, MargemEsquerda + 50, PosicaoDaLinha, New StringFormat()) While (leitor("pedidoID")) 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") preço = linhaDS("preço") subtotal = linhaDS("subtotal") 'condicao = linha("condicao") 'total += subtotal 'condicao = linha("condicao") e.Graphics.DrawString(produtoID, FonteNormal, Brushes.Red, MargemEsquerda + 200, PosicaoDaLinha, New StringFormat()) e.Graphics.DrawString(descricao, FonteNormal, Brushes.Red, MargemEsquerda + 250, PosicaoDaLinha, New StringFormat()) e.Graphics.DrawString(quantidade, FonteNormal, Brushes.Red, MargemEsquerda + 300, PosicaoDaLinha, New StringFormat()) e.Graphics.DrawString(preço, FonteNormal, Brushes.Red, MargemEsquerda + 350, PosicaoDaLinha, New StringFormat()) e.Graphics.DrawString(subtotal, FonteNormal, Brushes.Red, MargemEsquerda + 400, PosicaoDaLinha, New StringFormat()) 'e.Graphics.DrawString(condicao, FonteNormal, Brushes.Red, MargemEsquerda + 450, PosicaoDaLinha, New StringFormat()) 'e.Graphics.DrawString(total, FonteNormal, Brushes.Red, MargemEsquerda + 450, PosicaoDaLinha, New StringFormat()) Next linhaDS End While LinhaAtual += 1 End While Por favor, aonde estou errando?
  10. ola. To precisando de uma luz! Seguinte: No menu da minha aplicação tem o ítem imprimir pedido. ta. Preciso arranjar um código pra por nesse menu de forma que após digitado o numero do pedido, o código vai la no form de pedidos e entra no beginprint de um PrintDocument que tem la e envia para la o numero do pedido para que o PrintDocument que tem la exiba pelo printpreviewdialog os dados do pedido tal. O código que estou usando no menu é: Private Sub PedidoToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PedidoToolStripMenuItem.Click Dim frmAberto As Boolean = False For Each frm As Form In Application.OpenForms If frm.Name = "VisualizarImprimir" Then frmAberto = True Exit For End If Next Dim ret As String = String.Empty While True ret = InputBox("Entre o Número do Pedido") ' Será que o usuário está tentando cancelar? If ret.Trim() = String.Empty Then If MessageBox.Show("Deseja Cancelar a consulta?", "Consulta", MessageBoxButtons.YesNo) = _ Windows.Forms.DialogResult.Yes Then Return End If ElseIf Not IsNumeric(ret) Then MessageBox.Show("Digite somente números!") Else Exit While End If End While Dim sqlp As String = "Select * from " & TabelaPedidos & " where pedidoID = " & ret ds = accDb.ExecuteDS(sqlp, TabelaPedidos) If ds.Tables(0).Rows.Count = 0 Then MsgBox("Pedido não encontrado!") Else For Each drp As DataRow In ds.Tables(0).Rows If frmAberto = True Then My.Forms.VisualizarImprimir.BringToFront() Exit Sub Else '####### 'AQUI ENTRARIA O CÓDIGO INFORMANDO QUE O CÓDIGO DO PEDIDO É O CÓDIGO DIGITADO NA CAIXINHA DE DIALOGO ret = InputBox("Entre o Número do Pedido"). '####### End If Next End If End Sub o CÓDIGO DO MEU FORM DE PEDIDOS É ESSE: (ESTOU EXCLUINDO A PARTE DO CÓDIGO QUE NÃO TEM NADA A VER COM O PRINT DOCUMENTO TA?) 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 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 DECLARAÇÕES DAS VARIAVEIS GLOBAIS '''''''''''''''''''''''''''''''''''''''''' 'INICIO DAS FUNÇÕES E PROCÍDURES ###########RESTO DO ODIGO DO 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 = "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 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) '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 preço 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 '******************************** '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 While (LinhaAtual < LinhasPorPagina AndAlso leitor.Read()) produtoID = leitor("produtoID") unidade = leitor("unidade") descricao = leitor("descricao") preço = leitor("preço") 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(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 End While 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 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
  11. O pessoal. Ta muiito dificil. Meus olhos já estão queimando de tanto forçar as vistas com isto. Será que nehum colega aind ainda não passou por isso?
  12. Bom, resolovi fazer como no macoratti em: Mas deu alguns problemas: 1) o Código faz a leitura, exibe o numero de registros por pagino certinho mas, as paginas 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 If ele 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
  13. 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? '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
  14. 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?
  15. Bom pessoal. alguém 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
  16. Pessoal, o códogo funciona. Meu problema é como passar da primeira pagina para segunda se não tem onde clikar! Nem botão estou conseguindo(ideia de como e onde iserir) por! Deem uma força ae!
  17. Bom, talves isso possa ajudar: 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 Sub Trata-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())
  18. 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("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, 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?
  19. 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("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 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?
  20. Obrigado galera ficou assim: Private Sub ImprimirToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ImprimirToolStripMenuItem.Click Dim frmAberto As Boolean = False For Each frm As Form In Application.OpenForms If frm.Name = "VisualizarImprimir" Then frmAberto = True Exit For End If Next Dim X As String X = InputBox$("Digite o codigo do pedido a ser impresso!!", "Imprimir Pedido") While Not IsNumeric(X) MsgBox("Digite um numero!") X = InputBox$("Digite o codigo do pedido a ser impresso!!", "Imprimir Pedido") End While Dim sqlp As String = "Select * from " & TabelaPedidos & " where pedidoID = " & X ds = accDb.ExecuteDS(sqlp, TabelaPedidos) If ds.Tables(0).Rows.Count = 0 Then MsgBox("Pedido não encontrado!") Else For Each drp As DataRow In ds.Tables(0).Rows If frmAberto = True Then My.Forms.VisualizarImprimir.BringToFront() Exit Sub Else Dim visualForm As New VisualizarImprimir visualForm.ccodigo = drp.Item("pedidoID") visualForm.ShowDialog() End If Next End If End Sub
  21. Ola. Tenho no meu form do Menu(é o Form MDI da minha aplicação), um item do menu que faz a chamada para uma InputBox que solicitará do cliente a digitação de um valor numerico, que será vericado a partir dele se existe na pedido de pedidos algum pedido cujo id confere com o numero que o cliente digitou nma InputBox. Duvidas: 1) Como fazer para que, caso o cliente digitar uma letra, ou deixar o campo em branco, dar mensagem de erro e depois voltar na inputbox: 2) Tenho no código, uma chamada para um dataset que fará a pesquisa se o numero de pedido que o cliente digitou na inputbox tem na tabela de pedidos. Esse dataset só retorna notthing. Será po causa do form ser o MDI da aplicação? Vale lembrar que em todos os outros formularios o dataset funcioma normal. Segue o parte do codigo: Private Sub ImprimirToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ImprimirToolStripMenuItem.Click Dim frmAberto As Boolean = False For Each frm As Form In Application.OpenForms If frm.Name = "VisualizarImprimir" Then frmAberto = True Exit For End If Next If frmAberto = False Then 'Dim Pedido As Integer Dim Pedido As String = "" Dim Prompt As String Prompt = "Digite o Nº do pedido:" Pedido = InputBox(Prompt) If IsDBNull(Pedido) Or Pedido.ToString = "" Then MsgBox("Digite um numero!") Exit Sub Else Try Dim sqlp As String = "Select * from pedidos where pedidoID = " & Pedido dsp = accDb.ExecuteDS(sqlp, TabelaPedidos) For Each drp As DataRow In dsp.Tables(0).Rows If drp.Item("pedidoID") = "" Or IsDBNull(drp.Item("pedidoID")) Then MsgBox("Pedido não encontrado!") Exit Sub Else Dim visualForm As New VisualizarImprimir visualForm.ccodigo = Pedido visualForm.ShowDialog() End If Next drp Catch ex As Exception MsgBox("Número inválido!") End Try End If Else My.Forms.VisualizarImprimir.BringToFront() End If End Sub Código completo do form Imports MySql.Data.MySqlClient Public Class Menu Dim accDb As New DBConnection Dim dsp As DataSet = Nothing Dim TabelaPedidos As String = "pedidos" Private Sub Menu_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load For Each ctl As Control In Me.Controls If TypeOf ctl Is MdiClient Then ctl.BackColor = Me.BackColor End If Next ctl End Sub Private Sub ClientesToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ClientesToolStripMenuItem.Click My.Forms.Clientes.MdiParent = Me My.Forms.Clientes.Show() My.Forms.Clientes.BringToFront() End Sub Private Sub ProdutosToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProdutosToolStripMenuItem.Click My.Forms.Produtos.MdiParent = Me My.Forms.Produtos.Show() My.Forms.Produtos.BringToFront() End Sub Private Sub PedidosToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PedidosToolStripMenuItem.Click My.Forms.Pedidos.MdiParent = Me My.Forms.Pedidos.Show() My.Forms.Pedidos.BringToFront() End Sub Private Sub ImprimirToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ImprimirToolStripMenuItem.Click Dim frmAberto As Boolean = False For Each frm As Form In Application.OpenForms If frm.Name = "VisualizarImprimir" Then frmAberto = True Exit For End If Next If frmAberto = False Then 'Dim Pedido As Integer Dim Pedido As String = "" Dim Prompt As String Prompt = "Digite o Nº do pedido:" Pedido = InputBox(Prompt) If IsDBNull(Pedido) Or Pedido.ToString = "" Then MsgBox("Digite um numero!") Exit Sub Else Try Dim sqlp As String = "Select * from pedidos where pedidoID = " & Pedido dsp = accDb.ExecuteDS(sqlp, TabelaPedidos) For Each drp As DataRow In dsp.Tables(0).Rows If drp.Item("pedidoID") = "" Or IsDBNull(drp.Item("pedidoID")) Then MsgBox("Pedido não encontrado!") Exit Sub Else Dim visualForm As New VisualizarImprimir visualForm.ccodigo = Pedido visualForm.ShowDialog() End If Next drp Catch ex As Exception MsgBox("Número inválido!") End Try End If Else My.Forms.VisualizarImprimir.BringToFront() End If End Sub Private Sub Menu_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed 'Alterado o startup da aplicação para o form bem-vindo My.Forms.bem-vindo.Close() End Sub Private Sub FecharToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FecharToolStripMenuItem.Click Close() End Sub End Class
  22. Resolvi a 2ª tambem colocando dentro do load dos forms a instrução windows.state = maximized
  23. Ok. Brigadão. 1º e 3º Resolvcidas. Continua a 2ª mas surgiu um detalhe que notei só agora! Se eu quizer marcar um monte de linhas na DataGridView eu marco facilmente arrastando o mouse. Tem jeito de só conseguir selecionar uma linha só não? Contiunua a 2ª: 2) O Primeiro formulario que abro, ainda que a propriedade windows.state esteja setado como maximized, não abre maximizado de jeito nenhum. já do segundo form aberto em diante já abre maximizado. Como resolver isso? Se aguem souber. Bom, já que o Natal já passou, eu desejo um Próspero 2009 para todos do forum!
  24. Bom, pela primeira resposta, já tentei fazer assim tamebem mas o formulario, se chamado uma segunda vez, não sobrepoe ao´último que esta sendo exibido. Pela segunda resposta. Continuo na dúvida e.. Pela terceira resposta, tentei da forma abaixo e esta dando o seguinte erro quando entra na 1º linha. Dim registro As DataRowView = TryCast(DGWClientes.CurrentRow.DataBoundItem, DataRowView) É bom dizer que se trata de um form de pesquisaque se abre como diálogo e que entrega seu valor ao form que o chamou Referência de objeto não definida para uma instância de um objeto. Tai a segunda tentativa: Private Sub Selecionar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Selecionar.Click 'verifica se foi selecionado um registro no datagridivew Dim registro As DataRowView = TryCast(DGWClientes.CurrentRow.DataBoundItem, DataRowView) ' Existe algum registro selecionado? If registro IsNot Nothing Then MsgBox("Selecione um registro!") DGWClientes.Focus() Exit Sub End If ... end sub Segue o código todo do form: Imports MySql.Data.MySqlClient Public Class frmClientes Dim accDb As New DBConnection Dim ped As New Pedidos Public registrocliente As Integer Dim dr As DataRow Dim dt As DataTable Dim dss As DataSet = Nothing Dim ds As DataSet = Nothing Dim tabela As String = "Clientes" Private Sub mostracolunas() DGWClientes.Columns.Item(0).HeaderText = "ID" DGWClientes.Columns.Item(1).HeaderText = "CPF_CNPJ" DGWClientes.Columns.Item(2).HeaderText = "NOME" DGWClientes.Columns.Item(3).HeaderText = "ENDEREÇO" DGWClientes.Columns.Item(4).HeaderText = "E-MAIL" DGWClientes.Columns.Item(5).HeaderText = "ATIVO" DGWClientes.Columns.Item(6).HeaderText = "DATA" DGWClientes.Columns.Item(7).HeaderText = "TIPO" DGWClientes.Columns.Item(0).Visible = False DGWClientes.Columns.Item(5).Visible = False DGWClientes.Columns.Item(6).Visible = False DGWClientes.Columns.Item(7).Visible = False DGWClientes.Columns.Item(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight DGWClientes.Columns.Item(2).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft DGWClientes.Columns.Item(3).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft DGWClientes.Columns.Item(4).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft DGWClientes.Columns.Item(6).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight End Sub Private Sub frmClientes_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim sql As String = "Select * from " & tabela & " where ativo='S'" ds = accDb.ExecuteDS(sql, tabela) If ds.Tables(0).Rows.Count = 0 OrElse IsDBNull(ds.Tables(0).Rows.Item(0)) Then Dim dialogo As New Clientes dialogo.ShowDialog() Close() Else DGWClientes.DataSource = ds.Tables(0).DefaultView mostracolunas() End If End Sub Private Sub P_Nome_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles P_Nome.TextChanged Try Dim sql As String = "Select * from " & tabela & " where ativo='S' and (nome like '" & P_Nome.Text & "%' or clienteID like '" & P_Nome.Text & "%' or cast(cpf_cnpj as char) like '" & P_Nome.Text & "%')" dss = accDb.ExecuteDS(sql, tabela) DGWClientes.DataSource = dss.Tables(0).DefaultView Catch ex As Exception MessageBox.Show("Erro: " & ex.Message, "Sem conexão", MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End Try End Sub Private Sub Selecionar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Selecionar.Click 'verifica se foi selecionado um registro no datagridivew Dim registro As DataRowView = TryCast(DGWClientes.CurrentRow.DataBoundItem, DataRowView) ' Existe algum registro selecionado? If registro IsNot Nothing Then MsgBox("Selecione um registro!") DGWClientes.Focus() Exit Sub End If 'If DGWClientes.CurrentRow. = 0 Then ' MsgBox("Selecione um registro!") ' aqui, mesmo que eu selecione, ele da o msgbox do mesmo jeito ' DGWClientes.Focus() ' Exit Sub 'End If If P_Nome.Text = "" Then If ds.Tables(0).Rows.Count = 0 Or IsDBNull(ds.Tables(0).Rows.Count) Then MessageBox.Show("Não existe esse registro!") P_Nome.Focus() Exit Sub End If Else If dss.Tables(0).Rows.Count = 0 Or IsDBNull(dss.Tables(0).Rows.Count) Then MessageBox.Show("Não existe esse registro!") P_Nome.Focus() Exit Sub End If End If Dim linha As Integer = DGWClientes.CurrentRow.Index registrocliente = DGWClientes.Item("clienteID", linha).Value.ToString DialogResult = System.Windows.Forms.DialogResult.OK Close() End Sub Private Sub frmClientes_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress 'permitir que a mudança de um campo para outro do formulário seja possível com o pressionamento da tecla ENTER 'Altere a propriedade KeyPreview do formulário para True If e.KeyChar = Convert.ToChar(13) Then e.Handled = True SendKeys.Send("{TAB}") End If End Sub Private Sub DGWClientes_CellFormatting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DGWClientes.CellFormatting Dim d As Double ' Aqui vem a coluna com os dados, no meu caso é a coluna 1 If e.ColumnIndex = 1 Then ' Vejo se tem algo preenchido e eu estou convertendo ' para Double para aplicar uma máscara numérica If e.Value IsNot Nothing AndAlso _ Double.TryParse(e.Value.ToString(), d) Then Console.WriteLine(e.Value.ToString().Length) ' Se for até 11 caracteres, considero CPF If e.Value.ToString().Length <= 11 Then e.Value = d.ToString("###'.'###'.'###-##") ' De 12 a 14, CNPJ ElseIf e.Value.ToString().Length > 11 AndAlso _ e.Value.ToString().Length <= 14 Then e.Value = d.ToString("##'.'###'.'###/####-##") End If End If End If If e.ColumnIndex = 11 Then ' Vejo se tem algo preenchido e eu estou convertendo ' para Double para aplicar uma máscara numérica If e.Value IsNot Nothing AndAlso _ Double.TryParse(e.Value.ToString(), d) Then Console.WriteLine(e.Value.ToString().Length) ' Se for até 11 caracteres, considero CPF e.Value = d.ToString("(##)' '####'-'####") End If End If End Sub End Class
×
×
  • Criar Novo...