none
crystal reports com Dataset vinculados RRS feed

  • Pergunta

  •  

    Esses dias criei vários Dataset no VS 2005 com Querys personalizadas, listando tabelas ou relacionando dados.

     

    Ao usar o Crystal Reports 10 e vincular a conexão ao dataset pelo arquivo XSD ele mostrou todas minhas Querys, ao criar o relatorio RPT, depois linkar os campos, quando chamo no CrystalViewer ele não me mostra nada, apenas quando cria o dataset via código na aplicação, porque isso acontece?

     

    Há como likar o dataset sem a necessidade de montar o código com as querys novamente? Apenas linkando o Dataset que inserir no Form ou no Rpt?

     

    Obrigado,

     

    Carlos Lima

    segunda-feira, 28 de julho de 2008 01:07

Respostas

  • Carlos,

    ...quando chamo no CrystalViewer ele não me mostra nada, apenas quando cria o dataset via código na aplicação...

     

    O problema é que vc precisa "passar" os dados a serem exibidos para o relatório do Crystal Reports (DataReader, DataSet, DataTable, etc) e depois passar o relatório para ser exibido pelo ReportView

     

    Passando os dados para o o relatório do Crystal Reports

    Code Snippet

    crReportDocument.SetDataSource(oDataSet)

     

     

    Visualizando o relatório

    Code Snippet

    crPrintPreview.ReportSource = crReportDocument

     

     

    Um exemplo completo em VB.NET

    Code Snippet

    'referências do banco de dados

    Imports System.Data.SqlClient

    Imports System.Data

    'referências do crystal reports

    Imports CrystalDecisions.CrystalReports.Engine

    Imports CrystalDecisions.Shared

    'referência ConnectionStrings web.config

    Imports System.Web.Configuration.WebConfigurationManager

     

     

    Code Snippet

     

    Private Sub ListaProdutos()

    Dim crReportDocument As New ReportDocument

    Dim strConexao As String = ConnectionStrings("AWorks").ConnectionString()

    Dim oConn As New SqlConnection

    Dim strSQL As New StringBuilder

    Dim oDataSet As New dsProduct

    Try

    '1 passo: carregar os dados do relatório

    'abrindo conexão com o banco de dados

    oConn.ConnectionString = strConexao

    oConn.Open()

    'definindo o SQL

    strSQL.Append(" SELECT ")

    strSQL.Append(" Production.Product.ProductID, ")

    strSQL.Append(" Production.Product.Name, ")

    strSQL.Append(" Production.Product.Color, ")

    strSQL.Append(" Production.Product.ListPrice, ")

    strSQL.Append(" Production.ProductSubcategory.Name AS NameSubcategory ")

    strSQL.Append(" FROM ")

    strSQL.Append(" Production.Product INNER JOIN Production.ProductSubcategory ")

    strSQL.Append(" ON Production.Product.ProductSubcategoryID = Production.ProductSubcategory.ProductSubcategoryID ")

    Dim oDA As New SqlDataAdapter(strSQL.ToString, oConn)

    oDA.Fill(oDataSet, "Product")

    '2 passo: carregar o relatório

    Dim strPathreport As String = Server.MapPath("~\CrystalReports\rptProdutos.rpt")

    crReportDocument.Load(strPathreport)

    '

    'gerando o logo do relatório

    '

    Dim dRow As DataRow = oDataSet.Tables("ImageTable").NewRow()

    Dim fsOpen1 As New FileStream(Server.MapPath("~\logo_webcast.bmp"), FileMode.Open)

    Dim BinRed1 As New BinaryReader(fsOpen1)

    dRow.Item(0) = BinRed1.ReadBytes(CInt(BinRed1.BaseStream.Length))

    oDataSet.Tables("ImageTable").Rows.Add(dRow)

    'liberando os objetos

    dRow = Nothing

    BinRed1.Close()

    BinRed1 = Nothing

    fsOpen1.Dispose()

    fsOpen1 = Nothing

     

    '3 passo: definir o DataSource do relatório

    crReportDocument.SetDataSource(oDataSet)

    '4 passo: visualizar o relatório

    crPrintPreview.DisplayGroupTree = False

    crPrintPreview.HasCrystalLogo = False

    crPrintPreview.ReportSource = crReportDocument

    Catch ex As Exception

    System.Diagnostics.Debug.WriteLine(ex.Message)

    Finally

    'liberando os objetos

    oConn.Dispose()

    oDataSet.Dispose()

    oConn = Nothing

    oDataSet = Nothing

    End Try

    End Sub

     

     

    segunda-feira, 28 de julho de 2008 21:48
  • Complementando,

     

    Já o ReportView possui esse "funcionalidade".

     

    Adicione os DataSet com as querys personalizadas, adicione um item ao projeto do tipo Report, informe o dataset do Report pelo menu Report - Data Sources, faça o designer do relatório (adicione os campos) e visualize o relatório pelo controle ReportView.

     

    Isso tudo sem nenhuma linha de código.

     

     

     

     

    segunda-feira, 28 de julho de 2008 21:54

Todas as Respostas

  • cara acho que esta questao esta mais relacionada com a parte de developer, vc. ja tentou postar a questao no forum de .net

     

    Abs;

    segunda-feira, 28 de julho de 2008 10:31
  • não sei, postei em C# porque é nesse projeto que estou desenvolvendo e o moderador de lá mandou pra cá.

     

    Eu quero saber porque que os Objetos de TableAdapter do Visual Studio 2005 não são reconhecidos pelo Crystal Reports, tanto interno do VS como Externo.

     

    segunda-feira, 28 de julho de 2008 18:20
  • Carlos,

    ...quando chamo no CrystalViewer ele não me mostra nada, apenas quando cria o dataset via código na aplicação...

     

    O problema é que vc precisa "passar" os dados a serem exibidos para o relatório do Crystal Reports (DataReader, DataSet, DataTable, etc) e depois passar o relatório para ser exibido pelo ReportView

     

    Passando os dados para o o relatório do Crystal Reports

    Code Snippet

    crReportDocument.SetDataSource(oDataSet)

     

     

    Visualizando o relatório

    Code Snippet

    crPrintPreview.ReportSource = crReportDocument

     

     

    Um exemplo completo em VB.NET

    Code Snippet

    'referências do banco de dados

    Imports System.Data.SqlClient

    Imports System.Data

    'referências do crystal reports

    Imports CrystalDecisions.CrystalReports.Engine

    Imports CrystalDecisions.Shared

    'referência ConnectionStrings web.config

    Imports System.Web.Configuration.WebConfigurationManager

     

     

    Code Snippet

     

    Private Sub ListaProdutos()

    Dim crReportDocument As New ReportDocument

    Dim strConexao As String = ConnectionStrings("AWorks").ConnectionString()

    Dim oConn As New SqlConnection

    Dim strSQL As New StringBuilder

    Dim oDataSet As New dsProduct

    Try

    '1 passo: carregar os dados do relatório

    'abrindo conexão com o banco de dados

    oConn.ConnectionString = strConexao

    oConn.Open()

    'definindo o SQL

    strSQL.Append(" SELECT ")

    strSQL.Append(" Production.Product.ProductID, ")

    strSQL.Append(" Production.Product.Name, ")

    strSQL.Append(" Production.Product.Color, ")

    strSQL.Append(" Production.Product.ListPrice, ")

    strSQL.Append(" Production.ProductSubcategory.Name AS NameSubcategory ")

    strSQL.Append(" FROM ")

    strSQL.Append(" Production.Product INNER JOIN Production.ProductSubcategory ")

    strSQL.Append(" ON Production.Product.ProductSubcategoryID = Production.ProductSubcategory.ProductSubcategoryID ")

    Dim oDA As New SqlDataAdapter(strSQL.ToString, oConn)

    oDA.Fill(oDataSet, "Product")

    '2 passo: carregar o relatório

    Dim strPathreport As String = Server.MapPath("~\CrystalReports\rptProdutos.rpt")

    crReportDocument.Load(strPathreport)

    '

    'gerando o logo do relatório

    '

    Dim dRow As DataRow = oDataSet.Tables("ImageTable").NewRow()

    Dim fsOpen1 As New FileStream(Server.MapPath("~\logo_webcast.bmp"), FileMode.Open)

    Dim BinRed1 As New BinaryReader(fsOpen1)

    dRow.Item(0) = BinRed1.ReadBytes(CInt(BinRed1.BaseStream.Length))

    oDataSet.Tables("ImageTable").Rows.Add(dRow)

    'liberando os objetos

    dRow = Nothing

    BinRed1.Close()

    BinRed1 = Nothing

    fsOpen1.Dispose()

    fsOpen1 = Nothing

     

    '3 passo: definir o DataSource do relatório

    crReportDocument.SetDataSource(oDataSet)

    '4 passo: visualizar o relatório

    crPrintPreview.DisplayGroupTree = False

    crPrintPreview.HasCrystalLogo = False

    crPrintPreview.ReportSource = crReportDocument

    Catch ex As Exception

    System.Diagnostics.Debug.WriteLine(ex.Message)

    Finally

    'liberando os objetos

    oConn.Dispose()

    oDataSet.Dispose()

    oConn = Nothing

    oDataSet = Nothing

    End Try

    End Sub

     

     

    segunda-feira, 28 de julho de 2008 21:48
  • Complementando,

     

    Já o ReportView possui esse "funcionalidade".

     

    Adicione os DataSet com as querys personalizadas, adicione um item ao projeto do tipo Report, informe o dataset do Report pelo menu Report - Data Sources, faça o designer do relatório (adicione os campos) e visualize o relatório pelo controle ReportView.

     

    Isso tudo sem nenhuma linha de código.

     

     

     

     

    segunda-feira, 28 de julho de 2008 21:54
  • Legal Laercio, com o report view é possivel, com crystal não é... era exatamente isso que eu queria saber.

     

    Obrigado pelo esclarecimento.

     

    terça-feira, 29 de julho de 2008 17:18
  • Blz, Carlos,

     

    Depois não deixe de marcar o post como útil caso tenha ajudado.

     

    Ajude a melhorar o nosso Fórum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.

     

    terça-feira, 29 de julho de 2008 18:01