Usuário com melhor resposta
[AJUDA] Como dividir impressão em várias páginas

Pergunta
-
Seguinte galera, criei um form para impressão de alguns dados de um tabela Access. Até ai tudo bem, realizei a conexão tudo funcionando normal, porém os dados que quero imprimir, tem +1500 Linhas, e quando simulo a impressão, a página fica totalmente lerda (Devido ao programa carregar muitos dados em um página só). Enfim realizei várias pesquisas, achei casos semelhantes, porém ao tentar fazer não ta fluindo, eis minha pergunta: Como faço para limitar uma certa quantidade de linhas por pagina, e ao mesmo tempo gerar outras paginas??
Segue a parte do código que interessa:
Private Sub PrintDoc_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDoc.PrintPage Dim strconexao As String strconexao = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " & Application.StartupPath & "\BD.accdb" Dim conectar As New OleDb.OleDbConnection conectar.ConnectionString = strconexao conectar.Open() Dim cmd As New OleDb.OleDbCommand cmd.Connection = conectar cmd.CommandText = "SELECT * FROM TBProdutos order by nome" Dim reader As OleDb.OleDbDataReader reader = cmd.ExecuteReader() Dim gp As GraphicsPath = New GraphicsPath() Dim radius As Single = 5 Dim x As Single = 50 Dim y As Single = 50 Dim Altura As Integer = 70 Dim Largura As Integer = 670 '------------comeco da borda-----------------' gp.AddLine(x + radius, y, x + Largura - (radius * 2), y) gp.AddArc(x + Largura - (radius * 2), y, radius * 2, radius * 2, 270, 90) gp.AddLine(x + Largura, y + radius, x + Largura, y + Altura - (radius * 2)) gp.AddArc(x + Largura - (radius * 2), y + Altura - (radius * 2), radius * 2, radius * 2, 0, 90) gp.AddLine(x + Largura - (radius * 2), y + Altura, x + radius, y + Altura) gp.AddArc(x, y + Altura - (radius * 2), radius * 2, radius * 2, 90, 90) gp.AddLine(x, y + Altura - (radius * 2), x, y + radius) gp.AddArc(x, y, radius * 2, radius * 2, 180, 90) gp.CloseFigure() e.Graphics.DrawPath(Pens.Black, gp) gp.Dispose() '--------------- fim da borda -------------' Dim font As New Font("Arial", 9, FontStyle.Regular, GraphicsUnit.Point) Dim font1 As New Font("Segoe UI Semilight", 14, FontStyle.Bold, GraphicsUnit.Point) Dim font2 As New Font("Arial", 9, FontStyle.Bold, GraphicsUnit.Point) Dim LinhasX1 As Single = 50 Dim LinhasX2 As Single = 560 Dim a As Integer Do While reader.Read() Dim nome As String = reader("nome") Dim modelo As String = reader("modelo") Dim precoc As Double = reader("preco_custo") Dim dataos As String = DateTime.Now.ToString("dd/MM/yyyy HH:mm") If nome.Length > 30 Then nome = nome.Substring(0, 29) & "." End If If modelo.Length > 55 Then modelo = modelo.Substring(0, 54) & "." End If e.Graphics.DrawString(nome, font, Brushes.Black, 50, 180 + a) e.Graphics.DrawString("Nome:", font2, Brushes.Black, 50, 166) e.Graphics.DrawString(modelo, font, Brushes.Black, 330, 180 + a) e.Graphics.DrawString("Modelo:", font2, Brushes.Black, 330, 166) e.Graphics.DrawString(precoc.ToString("c"), font, Brushes.Black, 650, 180 + a) e.Graphics.DrawString("Preço Custo:", font2, Brushes.Black, 650, 166) e.Graphics.DrawImage(Image.FromFile(Application.StartupPath & "\logo.png"), 150, 58) e.Graphics.DrawString("Rua xxxx, xx - zzz", font, Brushes.Black, 450, 73) e.Graphics.DrawString(" (11) 0000-0000 / (11) 0000-0000", font, Brushes.Black, 450, 85) e.Graphics.DrawString("RELATÓRIO", font1, Brushes.Black, 350, 130) e.Graphics.DrawString(dataos, font, Brushes.Black, 603, 125) a += 13 Loop End Sub
Respostas
-
Por que você não conta o numero de linhas retornadas de sua consulta e limita a impressão de 80 linhas por pagina:
Veja ai um tutorial de Macoratti- Sugerido como Resposta Ricardo Barbosa Cortes segunda-feira, 3 de novembro de 2014 17:23
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 3 de novembro de 2014 17:55
-
kkk Macoratti nunca passa todo o código, baixa o fonte no final da pagina que tem tudo declarado
- Sugerido como Resposta Ricardo Barbosa Cortes segunda-feira, 3 de novembro de 2014 17:23
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 3 de novembro de 2014 17:55
Todas as Respostas
-
Por que você não conta o numero de linhas retornadas de sua consulta e limita a impressão de 80 linhas por pagina:
Veja ai um tutorial de Macoratti- Sugerido como Resposta Ricardo Barbosa Cortes segunda-feira, 3 de novembro de 2014 17:23
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 3 de novembro de 2014 17:55
-
-
-
Desculpa não vi :P
Então, dei uma lida no tutorial (obviamente lendo as partes em relação a limitação das linhas) E o seguinte, no codigo ele não declarou a variável "linhaAtual" e é exatamente isso que me "buga", o que diabos declaro nela? Obvio que são as linhas referentes aos dados da tabela mas, como atribuo esse valor??"While (linhaAtual < linhasPorPagina And leitor.Read())"
-
kkk Macoratti nunca passa todo o código, baixa o fonte no final da pagina que tem tudo declarado
- Sugerido como Resposta Ricardo Barbosa Cortes segunda-feira, 3 de novembro de 2014 17:23
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 3 de novembro de 2014 17:55