Ir para conteúdo
Fórum Script Brasil
  • 0

Como imprimir o conteúdo de um Datagrid?


Leandro_Pirozzi

Pergunta

5 respostass a esta questão

Posts Recomendados

  • 0
Nossa de tanto q eu já li matéria sobre isso estou ficando doido e o maximo q consegui imprimir foi o cabeçalho do datagrid.

Bom vou postar a function que estou utilizando, porém não consigo imprimir o conteúdo do recordset. Somente imprime o cabeçalho com o nome dos campos da tabela. Se alguém puder ajudar. Agradeço.

É necessário adicionar a Referencia Microsoft Activex data Objects.

Public Function imprimir(ByVal DataGrid1 As DataGrid, _
                         ByVal rsbuscapers As ADODB.Recordset, _
                         ByVal Titulo As String) As Boolean
       
    On Error GoTo Error_Function
       
       
    Dim c As Integer
    Dim dato As String
    Dim Titles As String
    Dim Header As String
    Dim l As Integer 'number of lines For portrait
    Dim LLCount As Integer 'temporary line counter
    Dim MyArray(20) As Integer
    Dim Rowado As Integer
    Dim Rowdatag As Integer
    Dim mAllowAddNew As Boolean
       
    mAllowAddNew = DataGrid1.AllowAddNew
    DataGrid1.AllowAddNew = False
    DataGrid1.Row = 0
    Screen.MousePointer = vbHourglass
       
    Header = " - Página n°: "
       
    ' Recupera os dados da coluna
    For c = 1 To DataGrid1.Columns.Count
        MyArray© = Len(DataGrid1.Columns(c - 1).Caption) + 10
        Titles = Titles & Space(10) & DataGrid1.Columns(c - 1).Caption
    Next
       
    ' Configura a fonte da impressão para os dados
    Printer.Font.Size = 9
    Printer.Font.Bold = True
    Printer.Font.Name = "Courier New"
       
    Printer.Orientation = vbPRORPortrait
    l = 82
    ' Imprime o titulo , os dados e o número de páginas
    Printer.Print Space(40) & Titulo
    Printer.Print Header; Printer.page
    Printer.Print Titles
    Printer.Font.Bold = False
       
    DataGrid1.Refresh
  
    ' Percorre os dados do Datagrid
    For Rowado = 1 To Int((rsbuscapers.RecordCount - 1) / 13) + 1
  
  
        For Rowdatag = 0 To DataGrid1.VisibleRows - 1
            DataGrid1.RowBookmark (Rowdatag)
            dato = Space(10)
  
  
            For c = 1 To DataGrid1.Columns.Count
                dato = dato & DataGrid1.Columns(c - 1).CellText(DataGrid1.Bookmark) & _
                         Space(MyArray© - _
                         Len(DataGrid1.Columns(c - 1).CellText(DataGrid1.Bookmark)))
               
            Next
            LLCount = LLCount + 1
  
  
            If LLCount <= l Then
                   
                Printer.Print dato
            Else
                ' Adiciona nova folha
                   
                Printer.NewPage
                Printer.Print Space(40) & Titulo
                Printer.Print Header; Printer.page
                Printer.Print Titles
                Printer.Print dato
                LLCount = 0
                   
            End If
            rsbuscapers.MoveNext
        Next Rowdatag
        DataGrid1.Scroll 0, DataGrid1.VisibleRows
    Next Rowado
    Printer.Print " "
    Printer.EndDoc
    Screen.MousePointer = vbNormal
       
    imprimir = True
    DataGrid1.AllowAddNew = mAllowAddNew
    Exit Function
       
' erro
Error_Function:
       
    MsgBox Err.Description, vbCritical
    DataGrid1.AllowAddNew = mAllowAddNew
    Screen.MousePointer = vbNormal
       
End Function
'Aqui onde chamo a function, passando como parametros o Datagrid, o recordset e o título que será impresso.
Private Sub Image1_Click()
 Call imprimir(DataGrid1, rsbuscapers, "PERSPECTIVAS")
End Sub
'mesmo assim não imprime o conteudo do RECORDSET.
Private Sub Form_Load()
    Me.Height = 2370
    Me.Width = 4500
    txtpers.Text = "pers"

Set cnbuscapers = New Connection
       
    cnbuscapers.CursorLocation = adUseClient
    ' usa o BD
    cnbuscapers.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
                                    App.Path & "\CONTATOS.mdb;Persist Security Info=False"

                          
    ' abre a conexao ADO
    cnbuscapers.Open
       
    ' Cria um novo recordset
    Set rsbuscapers = New Recordset
       
    ' abre os registros
    rsbuscapers.Open "SELECT EMPRESA, CONTATO, HISTORICO, DATATAREFA, ASSESSOR From CONTATOS_HISTORICO", _
                            cnbuscapers, adOpenStatic, adLockOptimistic
       
    ' inicia o datagrid
    Set DataGrid1.DataSource = rsbuscapers

End Sub

Editado por Leandro_Pirozzi
Link para o comentário
Compartilhar em outros sites

  • 0

leandro, nunca esqueca q o seu grid ta vinculado a um recordset.

sendo assim, é muito mais facil pegar os dados do recordset do q do grid.

olha como o macoratti faz naquele link:

Private Sub imprime_dados()
Dim tamanhofolha As Integer
Dim i As Integer
'define a fonte e o tamanhao da fonte
Printer.FontName = "Arial"
Printer.FontSize = "10"
tamanhofolha = Printer.ScaleHeight - 1440 'define o tamanho da folha
rs.MoveFirst 'movimenta o ponteiro para o primeiro registro

contapagina = 0 'inicia o variável
Call cabecalho 'chama a rotina do cabeçalho

Do While Not rs.EOF '
  
  If Printer.CurrentY >= tamanhofolha Then 'verifica se se folha já 'encheu'
     Printer.NewPage
     Call cabecalho
  End If
  
  '---------------imprime os dados da tabela----------------------------
  Printer.Print Tab(0); rs("nome");
  Printer.Print Tab(30); rs("endereço");
  Printer.Print Tab(60); rs("cidade");
  Printer.Print Tab(90); rs("estado");
  Printer.Print Tab(95); rs("cep")
  '--------------------------------------------
  
  rs.MoveNext 'vai para o proximo registro

Loop

Printer.EndDoc 'envia os dados para a impressora

MsgBox "Os dados foram enviados para a impressora ... ! "

End Sub[/code]

Link para o comentário
Compartilhar em outros sites

  • 0
leandro, nunca esqueca q o seu grid ta vinculado a um recordset.

sendo assim, é muito mais facil pegar os dados do recordset do q do grid.

olha como o macoratti faz naquele link:

Private Sub imprime_dados()
 Dim tamanhofolha As Integer
 Dim i As Integer
 'define a fonte e o tamanhao da fonte
 Printer.FontName = "Arial"
 Printer.FontSize = "10"
 tamanhofolha = Printer.ScaleHeight - 1440 'define o tamanho da folha
 rs.MoveFirst 'movimenta o ponteiro para o primeiro registro

 contapagina = 0 'inicia o variável 
 Call cabecalho 'chama a rotina do cabeçalho

Do While Not rs.EOF '
  
  If Printer.CurrentY >= tamanhofolha Then 'verifica se se folha já 'encheu'
     Printer.NewPage
     Call cabecalho
  End If
  
  '---------------imprime os dados da tabela----------------------------
  Printer.Print Tab(0); rs("nome");
  Printer.Print Tab(30); rs("endereço");
  Printer.Print Tab(60); rs("cidade");
  Printer.Print Tab(90); rs("estado");
  Printer.Print Tab(95); rs("cep")
  '--------------------------------------------
  
  rs.MoveNext 'vai para o proximo registro

Loop

Printer.EndDoc 'envia os dados para a impressora

MsgBox "Os dados foram enviados para a impressora ... ! "

End Sub

Opa Kuroi consegui fazer imprimir, obrigadão.

Deixa só perguntar uma coisa.

Voce tem idéia de como fazer quando o texto q esta sendo impresso é grande e não sai na folha, porque ele imprime somente uma linha se o texto for maior não imprime na linha debaixo.

olha meu codigo.

Dim tamanhofolha As Integer

Dim i As Integer

'define a fonte e o tamanhao da fonte

Printer.FontName = "Arial"

Printer.FontSize = "9"

tamanhofolha = Printer.ScaleHeight - 1400 'define o tamanho da folha

rsbuscapers.MoveFirst 'movimenta o ponteiro para o primeiro registro

contapagina = 0 'inicia o variável

Call cabecalho 'chama a rotina do cabeçalho

Do While Not rsbuscapers.EOF '

If Printer.CurrentY >= tamanhofolha Then 'verifica se se folha já 'encheu'

Printer.NewPage

Call cabecalho

End If

'---------------imprime os dados da tabela----------------------------

Printer.Print Tab(0); "EMPRESA"

Printer.Print Tab(5); rsbuscapers("EMPRESA")

Printer.Print Tab(0); "CONTATO"

Printer.Print Tab(5); rsbuscapers("CONTATO")

Printer.Print Tab(0); "HISTORICO"

Printer.Print Tab(5); rsbuscapers("HISTORICO") 'Por exemplo aqui normalmente so imprime uma linha e geralmente tenho varias linhas e não continua na linha debaixo, já vai direto para DATATAREFA

Printer.Print Tab(0); "DATA DA TAREFA"

Printer.Print Tab(5); rsbuscapers("DATATAREFA")

Printer.Print Tab(0); "ASSESSOR"

Printer.Print Tab(5); rsbuscapers("ASSESSOR")

Call linha

'--------------------------------------------

rsbuscapers.MoveNext 'vai para o proximo registro

Loop

Printer.EndDoc 'envia os dados para a impressora

MsgBox "Os dados foram enviados para a impressora ... ! "

End Sub

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...