USAR UM FORM GENÉRICO VISUALIZAR CRYSTAL REPORT

LUIS.HERRERA 26/08/2015 07:50:37
#450496
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]
NILSONTRES 26/08/2015 07:57:15
#450497
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()
LUIS.HERRERA 26/08/2015 08:27:02
#450500
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.
FFCOUTO 26/08/2015 08:54:53
#450503
Resposta escolhida
Luis,

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
LUIS.HERRERA 26/08/2015 11:30:48
#450515
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.
Tópico encerrado , respostas não são mais permitidas