RELATORIO VISUALIZA EM TELA MAS NAO IMPRIME VS2010
Srs. boa tarde.
Estou desenvolvendo um aplicativo Windows forms em Visual Studio 2010.
Estou gerando um relatório com as ferramentas da própria versão, mas estou tendo um problema.
Após as configurações necessárias, consigo visualizar todas as páginas, em tela.
Porem, quando peço para imprimir, imprime apenas a parte do cabeçalho e somente 1 folha.
E, aproveitando o tópico, há como a partir de um recordset (ExecuteReader()), pegar a quantidade de registros retornados sem que seja necessário varre-lo até o final? Porque neste caso, não tenho como retornar ao inÃcio, certo?
Código do programa
If contaRegistro <= numRegistros Then
intLinha = 1
If PrintDocument1.DocumentName = [Ô]Relatorio de contatos[Ô] Then
[txt-color=#0000f0][ô] esta parte imprime na impressora
objImpressao.DrawString([Ô]TITULO Principal[Ô], New System.Drawing.Font([Ô]Times New Roman[Ô], 14, FontStyle.Bold), Brushes.Black, 50, 50)
objImpressao.DrawString([Ô]Titulo do relatório[Ô], New System.Drawing.Font([Ô]Times New Roman[Ô], 12, FontStyle.Bold), Brushes.Black, 50, 80)
With objImpressao
.DrawString(strLinha, FonteRelatorio, Brushes.Black, 50, 97)
.DrawString([Ô]Data contato[Ô], FonteCabecalho, Brushes.Black, 50, 110)
.DrawString([Ô]Hora[Ô], FonteCabecalho, Brushes.Black, 126, 110)
.DrawString([Ô]Nome contato[Ô], FonteCabecalho, Brushes.Black, 160, 110)
.DrawString([Ô]Telefone[Ô], FonteCabecalho, Brushes.Black, 355, 110)
.DrawString([Ô]Email[Ô], FonteCabecalho, Brushes.Black, 450, 110)
.DrawString([Ô]Ref.[Ô], FonteCabecalho, Brushes.Black, 750, 110)
.DrawString([Ô]Solicitação do contato[Ô], FonteCabecalho, Brushes.Black, 70, 125)
.DrawString(strLinha, FonteRelatorio, Brushes.Black, 50, 127)
End With
[ô] até aqui[/txt-color]
intPosicao = 142
While (intLinha < intLinhasPagina)
blnTemRegistro = rdrRegContato.Read()
contaRegistro = contaRegistro + 1
If blnTemRegistro Then
Dim i As Integer = 0
i = Len(rdrRegContato([Ô]Fone_Principal_Contato[Ô]).ToString)
strFone = rdrRegContato([Ô]Fone_Principal_Contato[Ô]).ToString
Select Case i
Case 10
strFoneP = [Ô]([Ô] + strFone.Substring(0, 2) + [Ô]) [Ô] + strFone.Substring(2, 4) + [Ô]-[Ô] + strFone.Substring(6, 4)
Case 8
strFoneP = [Ô](00) [Ô] + strFone.Substring(0, 4) + [Ô]-[Ô] + strFone.Substring(4, 4)
Case Else
strFoneP = mskFonePrincipal.Text
End Select
i = 0
strFone = [Ô][Ô]
lenSolicitacao = Len(rdrRegContato([Ô]Solicitacao[Ô]).ToString)
If lenSolicitacao > 145 Then
x = MontaArray(rdrRegContato([Ô]Solicitacao[Ô]).ToString, lenSolicitacao)
If x = -1 Then x = 0
Else
strSolicitacao(0) = rdrRegContato([Ô]Solicitacao[Ô]).ToString
End If
With objImpressao
.DrawString(FormatDateTime(rdrRegContato([Ô]Data_Contato[Ô]).ToString, vbShortDate), FonteRelatorio, Brushes.Black, 60, intPosicao)
.DrawString(FormatDateTime(rdrRegContato([Ô]Hora_Contato[Ô]).ToString, vbShortTime), FonteRelatorio, Brushes.Black, 125, intPosicao)
.DrawString(rdrRegContato([Ô]Nome_Contato[Ô]).ToString, FonteRelatorio, Brushes.Black, 160, intPosicao)
.DrawString(strFoneP, FonteRelatorio, Brushes.Black, 355, intPosicao)
.DrawString(rdrRegContato([Ô]Email_Contato[Ô]).ToString, FonteRelatorio, Brushes.Black, 450, intPosicao)
.DrawString(rdrRegContato([Ô]Referencia_Imovel[Ô]).ToString, FonteRelatorio, Brushes.Black, 750, intPosicao)
For i = 0 To x
intPosicao = intPosicao + 15
.DrawString(strSolicitacao(i), FonteRelatorio, Brushes.Black, 70, intPosicao)
Next
intPosicao = intPosicao + 3
.DrawString(strLinha, FonteRelatorio, Brushes.Black, 50, intPosicao)
End With
Array.Clear(strSolicitacao, 0, strSolicitacao.Length)
intLinha = intLinha + x + 2
intPosicao = intPosicao + 15
x = 0
Else
intLinha = intLinha + 10
End If
End While
End If
e.HasMorePages = blnTemRegistro
End if
End Sub
Agradeço possÃvel ajuda.
Lauro
Estou desenvolvendo um aplicativo Windows forms em Visual Studio 2010.
Estou gerando um relatório com as ferramentas da própria versão, mas estou tendo um problema.
Após as configurações necessárias, consigo visualizar todas as páginas, em tela.
Porem, quando peço para imprimir, imprime apenas a parte do cabeçalho e somente 1 folha.
E, aproveitando o tópico, há como a partir de um recordset (ExecuteReader()), pegar a quantidade de registros retornados sem que seja necessário varre-lo até o final? Porque neste caso, não tenho como retornar ao inÃcio, certo?
Código do programa
If contaRegistro <= numRegistros Then
intLinha = 1
If PrintDocument1.DocumentName = [Ô]Relatorio de contatos[Ô] Then
[txt-color=#0000f0][ô] esta parte imprime na impressora
objImpressao.DrawString([Ô]TITULO Principal[Ô], New System.Drawing.Font([Ô]Times New Roman[Ô], 14, FontStyle.Bold), Brushes.Black, 50, 50)
objImpressao.DrawString([Ô]Titulo do relatório[Ô], New System.Drawing.Font([Ô]Times New Roman[Ô], 12, FontStyle.Bold), Brushes.Black, 50, 80)
With objImpressao
.DrawString(strLinha, FonteRelatorio, Brushes.Black, 50, 97)
.DrawString([Ô]Data contato[Ô], FonteCabecalho, Brushes.Black, 50, 110)
.DrawString([Ô]Hora[Ô], FonteCabecalho, Brushes.Black, 126, 110)
.DrawString([Ô]Nome contato[Ô], FonteCabecalho, Brushes.Black, 160, 110)
.DrawString([Ô]Telefone[Ô], FonteCabecalho, Brushes.Black, 355, 110)
.DrawString([Ô]Email[Ô], FonteCabecalho, Brushes.Black, 450, 110)
.DrawString([Ô]Ref.[Ô], FonteCabecalho, Brushes.Black, 750, 110)
.DrawString([Ô]Solicitação do contato[Ô], FonteCabecalho, Brushes.Black, 70, 125)
.DrawString(strLinha, FonteRelatorio, Brushes.Black, 50, 127)
End With
[ô] até aqui[/txt-color]
intPosicao = 142
While (intLinha < intLinhasPagina)
blnTemRegistro = rdrRegContato.Read()
contaRegistro = contaRegistro + 1
If blnTemRegistro Then
Dim i As Integer = 0
i = Len(rdrRegContato([Ô]Fone_Principal_Contato[Ô]).ToString)
strFone = rdrRegContato([Ô]Fone_Principal_Contato[Ô]).ToString
Select Case i
Case 10
strFoneP = [Ô]([Ô] + strFone.Substring(0, 2) + [Ô]) [Ô] + strFone.Substring(2, 4) + [Ô]-[Ô] + strFone.Substring(6, 4)
Case 8
strFoneP = [Ô](00) [Ô] + strFone.Substring(0, 4) + [Ô]-[Ô] + strFone.Substring(4, 4)
Case Else
strFoneP = mskFonePrincipal.Text
End Select
i = 0
strFone = [Ô][Ô]
lenSolicitacao = Len(rdrRegContato([Ô]Solicitacao[Ô]).ToString)
If lenSolicitacao > 145 Then
x = MontaArray(rdrRegContato([Ô]Solicitacao[Ô]).ToString, lenSolicitacao)
If x = -1 Then x = 0
Else
strSolicitacao(0) = rdrRegContato([Ô]Solicitacao[Ô]).ToString
End If
With objImpressao
.DrawString(FormatDateTime(rdrRegContato([Ô]Data_Contato[Ô]).ToString, vbShortDate), FonteRelatorio, Brushes.Black, 60, intPosicao)
.DrawString(FormatDateTime(rdrRegContato([Ô]Hora_Contato[Ô]).ToString, vbShortTime), FonteRelatorio, Brushes.Black, 125, intPosicao)
.DrawString(rdrRegContato([Ô]Nome_Contato[Ô]).ToString, FonteRelatorio, Brushes.Black, 160, intPosicao)
.DrawString(strFoneP, FonteRelatorio, Brushes.Black, 355, intPosicao)
.DrawString(rdrRegContato([Ô]Email_Contato[Ô]).ToString, FonteRelatorio, Brushes.Black, 450, intPosicao)
.DrawString(rdrRegContato([Ô]Referencia_Imovel[Ô]).ToString, FonteRelatorio, Brushes.Black, 750, intPosicao)
For i = 0 To x
intPosicao = intPosicao + 15
.DrawString(strSolicitacao(i), FonteRelatorio, Brushes.Black, 70, intPosicao)
Next
intPosicao = intPosicao + 3
.DrawString(strLinha, FonteRelatorio, Brushes.Black, 50, intPosicao)
End With
Array.Clear(strSolicitacao, 0, strSolicitacao.Length)
intLinha = intLinha + x + 2
intPosicao = intPosicao + 15
x = 0
Else
intLinha = intLinha + 10
End If
End While
End If
e.HasMorePages = blnTemRegistro
End if
End Sub
Agradeço possÃvel ajuda.
Lauro
ExecuteReader retorna um DataReader, e não um recordset. Há como, sim, usando um DataAdapter para retornar a consulta como DataTable e verificando a propriedade Count da propriedade Rows do DataTable gerado.
No caso da impressão, o que é esse [Ô]objImpressao[Ô] ? é o Graphics do PrintDocument ?
No caso da impressão, o que é esse [Ô]objImpressao[Ô] ? é o Graphics do PrintDocument ?
Faça seu login para responder