Usuário com melhor resposta
crystal reports com Dataset vinculados

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
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 SnippetcrReportDocument.SetDataSource(oDataSet)
Visualizando o relatório
Code SnippetcrPrintPreview.ReportSource = crReportDocument
Um exemplo completo em VB.NET
Code Snippet'referências do banco de dados
Imports
System.Data.SqlClientImports
System.Data'referências do crystal reports
Imports
CrystalDecisions.CrystalReports.EngineImports
CrystalDecisions.Shared'referência ConnectionStrings web.config
Imports
System.Web.Configuration.WebConfigurationManagerCode SnippetoConn.ConnectionString = strConexao
oConn.Open()
'definindo o SQLstrSQL.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 objetosdRow =
NothingBinRed1.Close()
BinRed1 =
NothingfsOpen1.Dispose()
fsOpen1 =
NothingcrReportDocument.SetDataSource(oDataSet)
'4 passo: visualizar o relatóriocrPrintPreview.DisplayGroupTree =
FalsecrPrintPreview.HasCrystalLogo =
FalsecrPrintPreview.ReportSource = crReportDocument
Catch ex As ExceptionSystem.Diagnostics.Debug.WriteLine(ex.Message)
Finally 'liberando os objetosoConn.Dispose()
oDataSet.Dispose()
oConn =
NothingoDataSet =
Nothing End Try End Sub -
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.
Todas as Respostas
-
-
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.
-
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 SnippetcrReportDocument.SetDataSource(oDataSet)
Visualizando o relatório
Code SnippetcrPrintPreview.ReportSource = crReportDocument
Um exemplo completo em VB.NET
Code Snippet'referências do banco de dados
Imports
System.Data.SqlClientImports
System.Data'referências do crystal reports
Imports
CrystalDecisions.CrystalReports.EngineImports
CrystalDecisions.Shared'referência ConnectionStrings web.config
Imports
System.Web.Configuration.WebConfigurationManagerCode SnippetoConn.ConnectionString = strConexao
oConn.Open()
'definindo o SQLstrSQL.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 objetosdRow =
NothingBinRed1.Close()
BinRed1 =
NothingfsOpen1.Dispose()
fsOpen1 =
NothingcrReportDocument.SetDataSource(oDataSet)
'4 passo: visualizar o relatóriocrPrintPreview.DisplayGroupTree =
FalsecrPrintPreview.HasCrystalLogo =
FalsecrPrintPreview.ReportSource = crReportDocument
Catch ex As ExceptionSystem.Diagnostics.Debug.WriteLine(ex.Message)
Finally 'liberando os objetosoConn.Dispose()
oDataSet.Dispose()
oConn =
NothingoDataSet =
Nothing End Try End Sub -
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.
-
-