Usuário com melhor resposta
Crystal Reports - C#-SubReports

Pergunta
-
Galera bom dia,
estou fazendo um relatorio no Visual Studio C# e utilizando Crystal Report.
Essse relatorio é o seguinte é mostrado o cliente e suas compras.
Então coloquei no Details, os dados do Cliente como Nome, Data da Venda e no mesma sessão coloquei um subreports
e nele os dados dos itens da venda.
cliquei em CHANGE SUBREPORTS LINK e fiz o relacionamento lá.
no programa no evento do botão imprimir coloquei o seguinte codigo:
relatorio.SetDataSource(
this.dsRelacaoVendas.Tables["RelacaoVenda"]);relatorio.Subreports[
"crRelRelacaoItensVenda"].SetDataSource(this.dsRelacaoItensVenda.Tables["RelacaoItensVenda"]);So que o relatório traz a primeira venda e seus itens, mas no segundo registro somente tras a venda e não aparece os itens. Aí fecho o relatorio e se eu seleciono a segunda venda os itens da primeira some??
Alguem sabe alguma solução aí?
Por favor me ajudem!
Wellington
- Movido AndreAlvesLimaModerator segunda-feira, 11 de abril de 2011 18:33 (De:C#)
Respostas
-
Wellington,
Primeiro passo: Valide o relatório entre o relatório principal e o sub-relatório:
Clique com o botão da direira no sub-relatório e selecione Edit SubReport
No SubReport selecione: CrystalReports - Report - Select Expert e clique no botão show formula e veja se existe o relacionamento.
exemplo:
Code Snippet{ProductListPriceHistory.ProductID} = {?Pm-Product.ProductID}um exemplo em C#
Code Snippet//referências
do banco de dadosusing
System.Data.SqlClient;using
System.Data;//referências
do crystal reportsusing
CrystalDecisions.CrystalReports.Engine;using
CrystalDecisions.Shared;//referência ConnectionStrings web.config
using
System.Web.Configuration.WebConfigurationManager;Code Snippet{
ReportDocument crReportDocument =
new ReportDocument();ReportDocument crReportSubDocument =
new ReportDocument(); string strConexao = ConnectionStrings("AWorks").ConnectionString();SqlConnection oConn =
new SqlConnection();StringBuilder strSQL =
new StringBuilder();DataSet oDataset =
new DataSet(); try {//1 passo: carregar o relatório
string strPathreport = Server.MapPath("~\\CrystalReports\\rptPrecoProdutos.rpt");crReportDocument.Load(strPathreport);
//2 passo: passar os dados para o relatório (datatable)
//abrindo conexão com o banco de dados
oConn.ConnectionString = strConexao;
oConn.Open();
//carregando os dados
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; ");strSQL.Append(
" SELECT ");strSQL.Append(
" ProductID, ");strSQL.Append(
" StartDate, ");strSQL.Append(
" EndDate, ");strSQL.Append(
" ListPrice");strSQL.Append(
" FROM Production.ProductListPriceHistory");SqlDataAdapter oDA =
new SqlDataAdapter(strSQL.ToString, oConn);oDA.Fill(oDataset);
//definindo o DataSource
do relatóriocrReportSubDocument = crReportDocument.OpenSubreport(
"rptPrecoProdutoHistorico.rpt");crReportDocument.Database.Tables(0).SetDataSource(oDataset.Tables(0));
//dados
do sub-relatóriocrReportSubDocument.Database.Tables(0).SetDataSource(oDataset.Tables(1));
//visualizando o relatório
crPrintPreview.DisplayGroupTree =
false;crPrintPreview.HasCrystalLogo =
false;crPrintPreview.ReportSource = crReportDocument;
}
catch (Exception ex) {System.Diagnostics.Debug.WriteLine(ex.Message);
}
finally {//fechando a conexão com o banco de dados
oConn.Close();
//liberando os objetos
oConn.Dispose();
oDataset.Dispose();
oConn = null;
oDataset = null;
}
}
Ajude a melhorar o nosso Fórum!
Não esqueça de marca a mensagem como "útil", caso tenha ajudado.No dia 17/04/2008 vou fazer um super webcast sobre Crystal Reports e ReportViewer !
https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032370740&culture=pt-BR
Todas as Respostas
-
Wellington,
Primeiro passo: Valide o relatório entre o relatório principal e o sub-relatório:
Clique com o botão da direira no sub-relatório e selecione Edit SubReport
No SubReport selecione: CrystalReports - Report - Select Expert e clique no botão show formula e veja se existe o relacionamento.
exemplo:
Code Snippet{ProductListPriceHistory.ProductID} = {?Pm-Product.ProductID}um exemplo em C#
Code Snippet//referências
do banco de dadosusing
System.Data.SqlClient;using
System.Data;//referências
do crystal reportsusing
CrystalDecisions.CrystalReports.Engine;using
CrystalDecisions.Shared;//referência ConnectionStrings web.config
using
System.Web.Configuration.WebConfigurationManager;Code Snippet{
ReportDocument crReportDocument =
new ReportDocument();ReportDocument crReportSubDocument =
new ReportDocument(); string strConexao = ConnectionStrings("AWorks").ConnectionString();SqlConnection oConn =
new SqlConnection();StringBuilder strSQL =
new StringBuilder();DataSet oDataset =
new DataSet(); try {//1 passo: carregar o relatório
string strPathreport = Server.MapPath("~\\CrystalReports\\rptPrecoProdutos.rpt");crReportDocument.Load(strPathreport);
//2 passo: passar os dados para o relatório (datatable)
//abrindo conexão com o banco de dados
oConn.ConnectionString = strConexao;
oConn.Open();
//carregando os dados
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; ");strSQL.Append(
" SELECT ");strSQL.Append(
" ProductID, ");strSQL.Append(
" StartDate, ");strSQL.Append(
" EndDate, ");strSQL.Append(
" ListPrice");strSQL.Append(
" FROM Production.ProductListPriceHistory");SqlDataAdapter oDA =
new SqlDataAdapter(strSQL.ToString, oConn);oDA.Fill(oDataset);
//definindo o DataSource
do relatóriocrReportSubDocument = crReportDocument.OpenSubreport(
"rptPrecoProdutoHistorico.rpt");crReportDocument.Database.Tables(0).SetDataSource(oDataset.Tables(0));
//dados
do sub-relatóriocrReportSubDocument.Database.Tables(0).SetDataSource(oDataset.Tables(1));
//visualizando o relatório
crPrintPreview.DisplayGroupTree =
false;crPrintPreview.HasCrystalLogo =
false;crPrintPreview.ReportSource = crReportDocument;
}
catch (Exception ex) {System.Diagnostics.Debug.WriteLine(ex.Message);
}
finally {//fechando a conexão com o banco de dados
oConn.Close();
//liberando os objetos
oConn.Dispose();
oDataset.Dispose();
oConn = null;
oDataset = null;
}
}
Ajude a melhorar o nosso Fórum!
Não esqueça de marca a mensagem como "útil", caso tenha ajudado.No dia 17/04/2008 vou fazer um super webcast sobre Crystal Reports e ReportViewer !
https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032370740&culture=pt-BR -
-
boas eu tambem estou fazendo um relatorio no Visual Studio C# e utilizando Crystal Report.
para a gestão de consumiveis...
eu faço os passos todos mas nao sei que codigos tenho que por no programa e onde por porque quando corro o programa nao me aparece os campos que estao na base de dados!! -
puntz,
Eu fiz 2 vídeos para a comunidade MSDN com as principais funcionalidades como como montar relatórios utilizandos os componentes (Crystal Reports e ReportView) com DataSet (Como fazer o designer, passar os dados, montar gráficos, etc.)
Em anexo, links para download do webcast sobre a construção de relatórios com Crystal Reports e ReportView
https://www.msdnbrasil.com.br/mediacenter/search.aspx?Busca=Reportview
Conteúdo:
Gerando relatórios do seu projeto: Crystal Reports versus Report Viewer Parte 1
Duração: 45 minutos:
Tópicos a serem abordados:
Crystal Reports .NET 2005 e Report Viewer
- Construindo um relatório com os principais recursos do componente; - Visualização e Impressão através de uma aplicação ASP .NET; - Opções avançadas de construção de relatórios; - Exportação para PDF sem “Print Preview” - Exibir uma imagem no cabeçalho do relatório de forma dinâmica
Gerando relatórios do seu projeto: Crystal Reports versus Report Viewer Parte 2
Duração: 1:30 minutos:
Tópicos a serem abordados: Continuação: Aplicação ASP.NET (Visual Studio 2005 Professional Edition) - Opções avançadas com Crystal Reports .NET 2005 e ReportView - Agrupamento (Group) - Sub-Relatório (SubReport) - Imagens armazenadas no banco de dados - Gráficos (Pizza e Barras) Aplicação Windows (Visual Studio 2008 Professional Edition) - Criação de um relatório do tipo DrillDown com link para um sub-relatório utilizando o componente ReportView
Ajude a melhorar o nosso Fórum!
Não esqueça de marca a mensagem como "útil", caso tenha ajudado. -
Laercio, Era mesmo isso que eu estava a precisar
só que há um problema com o link de download (https://www.msdnbrasil.com.br/mediacenter/search.aspx?Busca=Reportview) não está conseguindo aceder! agradecia muito que podesses disponibilizar isso, outra coisa ai falas que os relatorios vao ser mostrados atraves de paginas Asp, tambem é possivel fazer numa win form! mas de qualquer maneira o importante e conseguir fazer!!
-
Faça o seguinte:
Entre no link
http://www.msdnbrasil.com.br/mediacenter/default.aspx
e Informe reportview no campo Localizar conteúdo e clique no botão ok
ou tente o link
http://www.msdnbrasil.com.br/mediacenter/search.aspx?Busca=Reportview
Espero ter ajudado!
-
Laércio, boa tarde
Fizemos um relatório no VS2008 utilizando o Crystal Reports.
Aparentemente está tudo certo, o relatório chama a Stored Procedure, o relatório é gerado, e apresentado no preview.
Depois quando clicamos no Print ou no Export, novamente é chamado a SP, e tal.
Não que seja ruim, mas é mais lento.
É dessa forma mesmo, ou tem como acertar para ele fazer print/export sem chamar novamente a SP ?
At,
Carlos Hass -
Bom dia,
Laercio, fiz exatamente como voce fez no seu vídeo com imagens dinamicas, o relatório aparece mais a imagem não. estou usando c# o código está ai..using System; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; //referências do banco de dados using System.Data.SqlClient; using System.Data; //referências do crystal reports using CrystalDecisions.CrystalReports.Engine; using CrystalDecisions.Shared; //referência ConnectionStrings web.config using System.Web.Configuration; //referência imagem using System.IO; using System.Drawing; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { ReportDocument crReportDocument = new ReportDocument(); string strConexao = ConfigurationManager.ConnectionStrings["ServerConnectionString"].ConnectionString; SqlConnection sqlConn = new SqlConnection(); string strSql = string.Empty; dsEmailCredenciado dataSet = new dsEmailCredenciado(); try { //1 passo: carregar os dados do relatório / abrindo conexão com o banco de dados sqlConn.ConnectionString = strConexao; sqlConn.Open(); //definindo o SQL strSql = "SELECT Cp080_01 AS Codigo_Credenciado, Cp080_03 AS Credenciado, Cp080_14 AS Email FROM Tb080 ORDER BY Cp080_03"; SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(strSql,sqlConn); sqlDataAdapter.Fill(dataSet, "PROC_rptEmailCredenciado"); //2 passo: carregar o relatório string strCaminhoRelatorio = string.Empty; strCaminhoRelatorio = Server.MapPath("~\\Relatório\\CrystalReport.rpt"); crReportDocument.Load(strCaminhoRelatorio); //gerando o logo do relatório DataRow dRow = dataSet.Tables["TabelaDeImagem"].NewRow(); FileStream fsOpen1 = new FileStream(Server.MapPath("~\\LogoCabecalho.bmp"), FileMode.Open,FileAccess.Read); BinaryReader BinRed1 = new BinaryReader(fsOpen1); dRow.ItemArray[0] = BinRed1.ReadBytes(Convert.ToInt32(BinRed1.BaseStream.Length)); dataSet.Tables["TabelaDeImagem"].Rows.Add(dRow); //liberando os objetos dRow = null; BinRed1.Close(); BinRed1 = null; fsOpen1.Dispose(); fsOpen1 = null; //3 passo: definir o DataSource do relatório crReportDocument.SetDataSource(dataSet); //4 passo: visualizar o relatório crPrintPreview.DisplayGroupTree = false; crPrintPreview.HasCrystalLogo = false; crPrintPreview.ReportSource = crReportDocument; } catch { System.Diagnostics.Debug.WriteLine("Erro ao Gerar o Relatório"); } finally { //liberando os objetos sqlConn.Dispose(); dataSet.Dispose(); sqlConn = null; dataSet = null; } } }
não sei se coloquei se essa linha está certa
dRow.ItemArray[0] = BinRed1.ReadBytes(Convert.ToInt32(BinRed1.BaseStream.Length));
pq acho q eu estou carregando a imagem em lugar errado.
pode me dar uma ajuda...
abraço
At
Marcelo -
-
-
Estou com uma dúvida nessa linha:
crReportDocument.Load(Server.MapPath("RelContato.rpt"));
No Windows Form não tem esse Server.MapPath...
Estou com o mesmo problema e pelo que vi ninguém se habilita a responder!!! uma Pena.
Espero que alguém posso nos ajudar!
Obrigado galera!
-
Jessy_Bastos e Hick2008
Quando comecei a mexer com o crystal report tive esses mesmos problemas
e não conseguia resposta, ate que consegui fazer o seguinte código que acabou com todos meus problemas.
Espero que ajudem a vocês também.
//Crio um novo form para o preeview
Form fPreeView = new Form();
fPreeView.WindowState = FormWindowState.Maximized;
Crio uma instancia do relatorio
NomeDoSeuRelatorio report = new Namespace.NomeDoSeuRelatorio();
Defino o datasource do relatorio
report.SetDataSource(SeuDataSet);
CrystalDecisions.Windows.Forms.CrystalReportViewer reportview = new CrystalReportViewer();
reportview.Parent = fPreeView;
reportview.Dock = DockStyle.Fill;
reportview.ReportSource = report;
reportview.DisplayGroupTree = false;
fPreeView.ShowDialog();
Caso tenha sido util, favor marcar.
Abraços,
Zagatti, Angelo Itápolis-SP