USAR UM FORM GENÉRICO VISUALIZAR CRYSTAL REPORT
Bom dia!
Estou tentando fazer um form genérico para visualizar qualquer relatório, mas não estou conseguindo. A ideia é usar um método para montar cada relatório e passá-lo ao visualizador único. Porém ao tentar chamar o formulário que contém o visualizador, não consigo ter acesso a ele, não fica visÃvel nas propriedades do intelicense. O componente do visualizador não possui também a propriedade Modifier para que possa permitir o acesso de outro formulário.
Como fazer isso?
frmVerRelat myView = new frmVerRelat(); //Crio instância formulário
MeuRelatorio cr = new MeuRelatorio(); //Crio instância objeto relatório
cr.DataDefinition.FormulaFields[[Ô]versao[Ô]].Text = [Ô][ô][Ô] + Program.myVersao + [Ô][ô][Ô]; //passo variável ao relatório
cr.SetDataSource(minhaLista); //Passa lista de dados ao relatório
cr.Subreports[[Ô]Logotipo.rpt[Ô]].SetDataSource(myLogo); //passo imagem de logotipo ao relatório através de um subrelatório
myView.crystalReportViewer1.DataSource = cr; [txt-color=#e80000]//isso não está funcionando, cr não está disponÃvel assim.[/txt-color]
Estou tentando fazer um form genérico para visualizar qualquer relatório, mas não estou conseguindo. A ideia é usar um método para montar cada relatório e passá-lo ao visualizador único. Porém ao tentar chamar o formulário que contém o visualizador, não consigo ter acesso a ele, não fica visÃvel nas propriedades do intelicense. O componente do visualizador não possui também a propriedade Modifier para que possa permitir o acesso de outro formulário.
Como fazer isso?
frmVerRelat myView = new frmVerRelat(); //Crio instância formulário
MeuRelatorio cr = new MeuRelatorio(); //Crio instância objeto relatório
cr.DataDefinition.FormulaFields[[Ô]versao[Ô]].Text = [Ô][ô][Ô] + Program.myVersao + [Ô][ô][Ô]; //passo variável ao relatório
cr.SetDataSource(minhaLista); //Passa lista de dados ao relatório
cr.Subreports[[Ô]Logotipo.rpt[Ô]].SetDataSource(myLogo); //passo imagem de logotipo ao relatório através de um subrelatório
myView.crystalReportViewer1.DataSource = cr; [txt-color=#e80000]//isso não está funcionando, cr não está disponÃvel assim.[/txt-color]
Dim frm As New CrystalDecisions.CrystalReports.Engine.ReportDocument [ô]Cria instacia do Crystal
frm = GetFormByName(V_RELCRYSTAL) [ô]nome do relatorio
frm.SetDataSource(SQL_VENDAS_ITENS.ListRelDetalhes(V_SQL)) [ô]Seta o datasource passa a sting SQl, que é um list da tabela de vendas
FRM_VIEW.CrystalReportViewer1.ReportSource = frm
FRM_VIEW.Show()
frm = GetFormByName(V_RELCRYSTAL) [ô]nome do relatorio
frm.SetDataSource(SQL_VENDAS_ITENS.ListRelDetalhes(V_SQL)) [ô]Seta o datasource passa a sting SQl, que é um list da tabela de vendas
FRM_VIEW.CrystalReportViewer1.ReportSource = frm
FRM_VIEW.Show()
Nilson estou usando C#, ao criar o post informei que era C#, mas ele trocou e colocou como VB errado. Corrigi novamente.
Isso que fez não é válido. Não consigo criar um form associando como um objeto Crystal dá erro.
Isso que fez não é válido. Não consigo criar um form associando como um objeto Crystal dá erro.
Luis,
Crie uma interface e faça o seu form herdar esta interface.
Depois é só associar o relatório.
No Form
Para chamar use:
Obs.: Não testei o código
Crie uma interface e faça o seu form herdar esta interface.
Depois é só associar o relatório.
public interface CRRelatorio
{
CrystalDecisions.CrystalReports.Engine.ReportDocument Report { get; set; }
}
No Form
partial class frmVerRelat : Form, CRRelatorio
{
public frmVerRelat()
{
InitializeComponent();
}
public CrystalDecisions.CrystalReports.Engine.ReportDocument Report { get; set; }
}
Para chamar use:
frmVerRelat myView = new frmVerRelat(); //Crio instância formulário
MeuRelatorio cr = new MeuRelatorio(); //Crio instância objeto relatório
cr.DataDefinition.FormulaFields[[Ô]versao[Ô]].Text = [Ô][ô][Ô] + Program.myVersao + [Ô][ô][Ô]; //passo variável ao relatório
cr.SetDataSource(minhaLista); //Passa lista de dados ao relatório
cr.Subreports[[Ô]Logotipo.rpt[Ô]].SetDataSource(myLogo); //passo imagem de logotipo ao relatório através de um subrelatório
myView.Report.DataSource = cr; // isso agora vai funcionar, cr estará disponÃvel.
Obs.: Não testei o código
Grande Fabiano obrigado novamente.
Tive de trocar na interface e no form com visualizador:
De: public CrystalDecisions.CrystalReports.Engine.ReportDocument Report { get; set; }
Para: public CrystalDecisions.Windows.Forms.CrystalReportViewer CRViewer { get; set; }
pois o objeto usado é o Viewer e não o Document
O Erro continuou...
Agora com o complemento da resposata do Fabiano (PVT) funcionou, basta incluir no inicializador do form com o View.
this.CRViewer = this.crystalReportViewer1;
Pronto abrindo belezinha os relatórios.
Obrigadão.
Tive de trocar na interface e no form com visualizador:
De: public CrystalDecisions.CrystalReports.Engine.ReportDocument Report { get; set; }
Para: public CrystalDecisions.Windows.Forms.CrystalReportViewer CRViewer { get; set; }
pois o objeto usado é o Viewer e não o Document
O Erro continuou...
Agora com o complemento da resposata do Fabiano (PVT) funcionou, basta incluir no inicializador do form com o View.
this.CRViewer = this.crystalReportViewer1;
Pronto abrindo belezinha os relatórios.
Obrigadão.
Tópico encerrado , respostas não são mais permitidas