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

Usando Crystal Reports Programaticamente


Thiago Alencar

Pergunta

Acabei de descobrir que o Crystal Reports vem embutido no VS .NET 2005 e gostaria de usa-lo na minha classe..

Sou novo nisto.. alguém poderia escrever um passo-a-passo bem basico instanciando, usando os metodos e salvando o relatorio?

Estive olhando a documentacao mas todos que encontrei explica como usa-la com wizzards.. mas eu preciso usa-lo programaticamente (essa palavra existe? rs)

Obrigado desde já,

Thiago.

*******************************

Hello,

I just found out that Crystal Reports comes embedded inside VS .NET 2005 and would like to use in my class..

So I'm new to this, could someone write a step-by-step of how do you instantiate, work and save the report ?

I've been looking over its documentation but all the ones I found explains how to use it through wizzards.. but I need to use it programmatically.

Thanks in advance..

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

5 respostass a esta questão

Posts Recomendados

  • 0

ok, muito obrigado..

ninguém tem alguma experiencia de como trabalhar sem usar o designer? qualquer dica esta valendo!

obrigado!

t+

ok.. consegui ate agora algo assim:

(no evento form_load):

'*************Create Grid BEGIN***************************************|
      Dim Table1 As DataTable = New DataTable("Customers")
      Dim Row1, Row2, Row3 As DataRow
      Dim Name As DataColumn = New DataColumn("Name")
      'declaring a column named Name
      Name.DataType = System.Type.GetType("System.String")
      'setting the datatype for the column
      Table1.Columns.Add(Name)
      'adding the column to table
      Dim Product As DataColumn = New DataColumn("Product")
      Product.DataType = System.Type.GetType("System.String")
      Table1.Columns.Add(Product)
      Dim Location As DataColumn = New DataColumn("Location")
      Location.DataType = System.Type.GetType("System.String")
      Table1.Columns.Add(Location)

      Row1 = Table1.NewRow()
      'declaring a new row
      Row1.Item("Name") = "This is a big string"
      'filling the row with values. Item property is used to set the field value.
      Row1.Item("Product") = "Notebook"
      'filling the row with values. adding a product
      Row1.Item("Location") = "Sydney"
      'filling the row with values. adding a location
      Table1.Rows.Add(Row1)
      'adding the completed row to the table
      Row2 = Table1.NewRow()
      Row2.Item("Name") = "Bella"
      Row2.Item("Product") = "Desktop"
      Row2.Item("Location") = "Adelaide"
      Table1.Rows.Add(Row2)
      Row3 = Table1.NewRow()
      Row3.Item("Name") = "Adam"
      Row3.Item("Product") = "PDA"
      Row3.Item("Location") = "Brisbane"
      Table1.Rows.Add(Row3)

      Dim ds As New DataSet()
      ds = New DataSet()
      'creating a dataset
      ds.Tables.Add(Table1)
      '*************Create Grid END***************************************|

      Dim MyReport As New CrystalReport1
      'MyReport.DataDefinition.RecordSelectionFormula = "{Orders.Order Date}>#01/01/2004#"
      MyReport.SetDataSource(ds)
      MyReport.PrintToPrinter(1, True, 0, 0)
      MyReport.SaveAs("asdf", True)
      MyReport.ExportToDisk(ExportFormatType.RichText, "C:\testesss.pdf")

apesar de existir um "overloaded method" SetDataSource que recebe um DataSet, toda vez que rodo o codigo com essa linha (MyReport.SetDataSource(ds)) ele retorna uma excessao dizendo que não existe tabela?!

sugestoes??

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

  • 0

Vou postar a forma que eu utilizo, quem sabe ajude.

Na tela o único componente que eu tenho é o CrystalReportView.

Meu Código:

Private Sub GeraRel(ByVal Query As String, ByVal Tabela As String, ByVal NomeArquivo As String, ByVal NomeRel As String)
        Dim crs As New CrystalDecisions.Web.CrystalReportSource()
        Dim DS As New DataSet

        Dim DAGEmpresa As New OleDbDataAdapter("SELECT GEMPRESA_ID, NOME_EMPRESA, ESTADO, CIDADE, BRASAO FROM GEMPRESA", Dll.Conexao)
        DAGEmpresa.Fill(DS, "GEMPRESA")
        DAGEmpresa.Dispose()

        While InStr(Query, ";") > 0
            Dll.Sql = Mid(Query, 1, InStr(Query, ";"))
            Query = Mid(Query, InStr(Query, ";") + 1, InStr(Query, ";"))

            Dim NomeTabela As String = Mid(Tabela, 1, InStr(Tabela, ";") - 1)
            Tabela = Mid(Tabela, InStr(Tabela, ";") + 1, InStr(Tabela, ";") - 1)

            Dim DA As New OleDbDataAdapter(Dll.Sql, Dll.Conexao)
            DA.Fill(DS, NomeTabela)
            DA.Dispose()
        End While

        crs.Report.FileName = NomeArquivo
        crs.ReportDocument.SetDataSource(DS)

        Cr.ReportSource = crs
        Cr.DataBind()

        Dim CrExportOptions As New ExportOptions
        Dim CrDiskFileDestinationOptions As New DiskFileDestinationOptions
        Dim CrFormatTypeOptions As New PdfRtfWordFormatOptions

        CrDiskFileDestinationOptions.DiskFileName = Server.MapPath("PDF/" & NomeRel & ".pdf")

        With CrExportOptions
            .ExportDestinationType = ExportDestinationType.DiskFile
            .ExportFormatType = ExportFormatType.PortableDocFormat
            .FormatOptions = CrFormatTypeOptions
            .DestinationOptions = CrDiskFileDestinationOptions
        End With

        Try
            Dim arq As New System.IO.FileInfo(Server.MapPath("PDF\" & NomeRel & ".pdf"))
            If arq.Exists Then
                arq.Delete()
            End If
            crs.ReportDocument.Export(CrExportOptions)
            Response.Redirect("PDF/" & NomeRel & ".pdf", False)
        Catch err As Exception
            Response.Write(err.Message)
        End Try
    End Sub
Eu criei uma formulário que fica responsável por gerar todos meus relatórios, e todos eles são gerados em pdf. Criei este função gerarel: Meu primeiro parâmetro "Query" é o Select, além dele se você reparar tenho uma outra query fixa (DAGEmpresa) que monta todos os cabeçalhos dos meus relatórios. Meu segunda parâmtro "Tabela" é o nome do meu da minha Table que esta dentro do meu DataSet, eu criei um único DataSet para meu projeto e nele criei as Tables com a mesma estrutura dos retornos das minhas querys, esse parâmetro "Tabela" é para referenciar qual Tables ele vai alimentar. O Parâmetro "NomeArquivo" é o nome do Arquivo.rpt que eu criei E o parâmtro NomeRel é o nome do PDF que ele vai gerar. Eu criei aquele While pois alguns relatórios necessitavam de mais de uma Tabela e consequentemente mais de uma query, aí resolvi separa-los por ";". Nessas 4 linhas:
crs.Report.FileName = NomeArquivo
        crs.ReportDocument.SetDataSource(DS)

        Cr.ReportSource = crs
        Cr.DataBind()

Eu alimento meu relatório com o DataSet e gero ele.

E o código abaixo é responsável por gerar o PDF e fazer o tratamento necessário.

Não sou tão didático, caso tenha alguma dúvida poste aí, que tento resolver.

Falows mano

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
      651,9k
×
×
  • Criar Novo...