RELATORIO VISUALIZA EM TELA MAS NAO IMPRIME VS2010

LAUROFELIPE 06/12/2012 15:47:31
#415553
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
PROFESSOR 29/12/2012 15:01:24
#416547
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 ?
Faça seu login para responder