IMPRIMIR DATAGRIDVIEW

LOPESKUTI 30/05/2012 09:52:11
#403138
Olá, estou tentando imprimir um datagridview na minha aplicação.
Coloquei um printdialog e tentei de várias formas, até converti pra bmp pra imprimir, só que não deu mt certo.

Alguém teria um modo um pouco mais fácil para imprimir o datagridview? Eu sou iniciante e essa é minha primeira aplicação pra valer.
Obrigado.
LOPESKUTI 30/05/2012 10:46:08
#403148
Eu vi todos os links e a maioria deles eu já acessei hoje. Mas não consegui fazer. Muitos deles estão em C# e eu não entendo.

Não tem uma forma de apenas pegar o que tem no datagridview (sem converter pra imagem) e imprimir como se fosse uma tabela comum?
TECLA 30/05/2012 11:11:33
#403149
Sim, se voce tem tem um componente PrintDocument no Form, eh so escrever uma iteracao no evento PrintPage do objeto de impressao percorrendo todos os Rows do DataGridView.

http://www.macoratti.net/08/11/vbn_vimp.htm
LOPESKUTI 30/05/2012 11:24:19
#403152
O meu printdocument ficou assim

Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
e.Graphics.DrawString([Ô]Dados do Cliente[Ô], New Font([Ô]arial[Ô], 40, FontStyle.Regular), Brushes.Black, 160, 80)

e.Graphics.DrawString([Ô]Código : [Ô], New Font([Ô]arial[Ô], 15, FontStyle.Regular), Brushes.Black, 20, 200)

e.Graphics.DrawString(ccodigo, New Font([Ô]arial[Ô], 15, FontStyle.Regular), Brushes.Black, 220, 200)

e.Graphics.DrawString([Ô]Nome : [Ô], New Font([Ô]arial[Ô], 15, FontStyle.Regular), Brushes.Black, 20, 230)

e.Graphics.DrawString(cnome, New Font([Ô]arial[Ô], 15, FontStyle.Regular), Brushes.Black, 220, 230)

e.Graphics.DrawString([Ô]Endereço : [Ô], New Font([Ô]arial[Ô], 15, FontStyle.Regular), Brushes.Black, 20, 260)

e.Graphics.DrawString(cendereco, New Font([Ô]arial[Ô], 15, FontStyle.Regular), Brushes.Black, 220, 260)

e.Graphics.DrawString([Ô]CEP : [Ô], New Font([Ô]arial[Ô], 15, FontStyle.Regular), Brushes.Black, 20, 290)

e.Graphics.DrawString(ccep, New Font([Ô]arial[Ô], 15, FontStyle.Regular), Brushes.Black, 220, 290)

e.Graphics.DrawString([Ô]Cidade : [Ô], New Font([Ô]arial[Ô], 15, FontStyle.Regular), Brushes.Black, 20, 290)

e.Graphics.DrawString(ccidade, New Font([Ô]arial[Ô], 15, FontStyle.Regular), Brushes.Black, 220, 290)

e.Graphics.DrawString([Ô]Estado : [Ô], New Font([Ô]arial[Ô], 15, FontStyle.Regular), Brushes.Black, 20, 290)

e.Graphics.DrawString(cestado, New Font([Ô]arial[Ô], 15, FontStyle.Regular), Brushes.Black, 220, 290)

e.Graphics.DrawString([Ô]Telefone : [Ô], New Font([Ô]arial[Ô], 15, FontStyle.Regular), Brushes.Black, 20, 290)

e.Graphics.DrawString(ctelefone, New Font([Ô]arial[Ô], 15, FontStyle.Regular), Brushes.Black, 220, 290)

e.Graphics.DrawString([Ô]Email : [Ô], New Font([Ô]arial[Ô], 15, FontStyle.Regular), Brushes.Black, 20, 290)

e.Graphics.DrawString(cemail, New Font([Ô]arial[Ô], 15, FontStyle.Regular), Brushes.Black, 220, 290)
End Sub


Como eu faço pra usar os campos do datagridview? Ele exibe os dados nessa mesma ordem.
Eu queria imprimir igual o datagridview, como se fosse uma tabela do excel.
LOPESKUTI 30/05/2012 11:40:33
#403155
To baixando o crystalreports... Se eu fizer um relatório e clicar no botão imprimir dele já abre a caixa de diálogo de impressão ou mesmo assim preciso do printdocument ??
ALEXPASSOS 30/05/2012 15:00:31
#403164
Resposta escolhida
Veja esse projeto pra se te ajuda... eu que fiz
LOPESKUTI 31/05/2012 11:00:21
#403225
ALEX PASSOS

to seguindo seu projeto e o código tá assim agora

Private Sub imprimirButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles imprimirButton.Click
Try

Application.DoEvents()


relatorioImpressao.Crystal.Refresh()
relatorioImpressao.Crystal.RefreshReport()

vContador = clientesDataGridView.Rows.Count

If vContador = 0 Then
MsgBox([Ô]Não há dados para imprimir[Ô], MsgBoxStyle.Information, [Ô]Atenção[Ô])
Exit Sub
End If

[ô]Variáveis com o nome das colunas



Application.DoEvents()

Dim rptNormal As New relatorio
rptNormal.SetDataSource(dSet)
[ô]frmImprimir.MdiParent = frmPrincipal

Me.Dispose()
Dim lobjImpressao As New relatorioImpressao
FrmBase.Controls.Add(lobjImpressao)
lobjImpressao.Show()

relatorioImpressao.Crystal.ReportSource = rptNormal

Catch ex As Exception
MsgBox(Err.Description)
End Try
End Sub



como eu posso fazer pra incluir os dados da minha tabela do sql no relatorio ???
ee tá dando o seguinte erro

[Ô]Object Reference not set to an instante of an object[Ô]
LOPESKUTI 31/05/2012 11:13:21
#403231
Consegui... Eu não tinha importado o relatorio pro reportviewer hehe

ficou assim o código

Private Sub imprimirButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles imprimirButton.Click
Try
Me.Dispose()
Dim lobjImpressao As New relatorioImpressao
FrmBase.Controls.Add(lobjImpressao)
lobjImpressao.Show()

Catch ex As Exception
MsgBox(Err.Description)
End Try
End Sub



o problema é que não tem opção no reportviewer pra não cortar parte das colunas? Pq a coluna email não aparece todo o email..
LOPESKUTI 31/05/2012 11:26:58
#403232
Agora eu consegui ajustar as colunas e linhas e tá imprimindo perfeitamente...
Só que toda vez que vai carregar o relatório ele pede a senha do banco de dados.

Como eu faço pra salvar ela e não pedir mais ???
LOPESKUTI 31/05/2012 17:20:25
#403295
Acho que saí muito do assunto. Vou encerrar esse tópico e criar um novo, pois este já está ficando confuso. Muito obrigado a todos.
Tópico encerrado , respostas não são mais permitidas