ACESSAR FORMULAFIELD EM SUBRELATORIO CRYSTAL REPOR
Boa tarde!
Já procurei tudo no google, mas não consigo encontrar a solução.
Tenho alguns relatórios Crystal 10.5 (VS 2008 com C#) que possuem subrelatórios. [txt-color=#0000f0](( Ok ))[/txt-color].
Porém preciso trocar os textos exibidos nas legendas de alguns campos no subrelatório e não consigo. Para exibir as legendas estou usando FormulaFields, pois elas são alteradas dinamicamente.
No relatório principal funciona fácil. Faço assim:
Porém ao tentar acessar os campos dentro do subrelatório não funciona.
Não dá erro na compilação, mas em runtime gera, dependendo do código que uso, um destes 2 erros:
[Ô]Ãndice não é válido[Ô]
OU
[Ô]Objeto não definido para uma instância de um objeto[Ô].
Tentativas:
Nenhuma das 03 funcionam.
Nota: Os relatórios funcionam perfeitamente com os dados do banco, Só não consigo trocar o texto nas legendas dos subrelatórios.
Não sei se há relação, mas a estrutura dos relatórios ficou assim:
Relatório principal
DocFolhaRosto cr = new DocFolhaRosto();
Section1 (Report Header)
Section2 (Page Header)
Section3 (Details a)
Subrelatório Normas (Name = Subreport2)
DetailSection4 (Details b)
Subrelatório Departamentos (Name = Subreport3)
DetailSection2 (Details c)
Legendas sem vÃnculo com dados (assinaturas)
Section4 (Report Footer)
Section5 (Page Footer)
O Subrelatório que estou tentando acessar é o Subreport3, mas terei de fazer o mesmo para o 2 também.
A estrutura deste subreport está assim:
Section1 (Report Header)
Section2 (Page Header)
GroupHeaderSection1
Aqui tenho as FormulasFields que preciso acessar: TituloEmpresa; TituloDepartamento; etc...
GroupFooterSection1
Section4 (Report Footer)
Section5 (Page Footer)
Nota: Não uso campo parâmetro, pode ser FormulaField ou TextField, pois o que preciso é só trocar o texto exibido nesse campo que não tem nenhuma relação com os valores do banco de dados.
Alguém tem ideia de onde estou errando?
Já procurei tudo no google, mas não consigo encontrar a solução.
Tenho alguns relatórios Crystal 10.5 (VS 2008 com C#) que possuem subrelatórios. [txt-color=#0000f0](( Ok ))[/txt-color].
Porém preciso trocar os textos exibidos nas legendas de alguns campos no subrelatório e não consigo. Para exibir as legendas estou usando FormulaFields, pois elas são alteradas dinamicamente.
No relatório principal funciona fácil. Faço assim:
cr.DataDefinition.FormulaFields[[Ô]NomeMeuCampo[Ô]].Text = [Ô][ô]Meu texto para exibir[ô][Ô];
Porém ao tentar acessar os campos dentro do subrelatório não funciona.
Não dá erro na compilação, mas em runtime gera, dependendo do código que uso, um destes 2 erros:
[Ô]Ãndice não é válido[Ô]
OU
[Ô]Objeto não definido para uma instância de um objeto[Ô].
Tentativas:
1) cr.Subreports[[Ô]Subreport3[Ô]].DataDefinition.FormulaFields[[Ô]NomeMeuCampo[Ô]].Text = [Ô][ô]Meu texto para exibir[ô][Ô];
ou
2) cr.Subreports[[Ô]DocDepto.rpt[Ô]].DataDefinition.FormulaFields[[Ô]NomeMeuCampo[Ô]].Text = [Ô][ô]Meu texto para exibir[ô][Ô];
3) ReportDocument mySubReportDepto = cr.Subreports[[Ô]DocDepto.rpt[Ô]];
mySubReportDepto.DataDefinition.FormulaFields[[Ô]TituloEmpresa[Ô]].Text = [Ô][ô]Meu texto para exibir[ô][Ô];
cr.SetDataSource(myDataReaderDados); //Passa dados ao relatório
cr.Subreports[[Ô]DocNorma.rpt[Ô]].SetDataSource(listaNormas); //Passa dados subreport2
cr.Subreports[[Ô]DocDepto.rpt[Ô]].SetDataSource(listaDepto); //Passa dados subreport3
crystalReportViewer1.ReportSource = cr;
crystalReportViewer1.Show();
Nenhuma das 03 funcionam.
Nota: Os relatórios funcionam perfeitamente com os dados do banco, Só não consigo trocar o texto nas legendas dos subrelatórios.
Não sei se há relação, mas a estrutura dos relatórios ficou assim:
Relatório principal
DocFolhaRosto cr = new DocFolhaRosto();
Section1 (Report Header)
Section2 (Page Header)
Section3 (Details a)
Subrelatório Normas (Name = Subreport2)
DetailSection4 (Details b)
Subrelatório Departamentos (Name = Subreport3)
DetailSection2 (Details c)
Legendas sem vÃnculo com dados (assinaturas)
Section4 (Report Footer)
Section5 (Page Footer)
O Subrelatório que estou tentando acessar é o Subreport3, mas terei de fazer o mesmo para o 2 também.
A estrutura deste subreport está assim:
Section1 (Report Header)
Section2 (Page Header)
GroupHeaderSection1
Aqui tenho as FormulasFields que preciso acessar: TituloEmpresa; TituloDepartamento; etc...
GroupFooterSection1
Section4 (Report Footer)
Section5 (Page Footer)
Nota: Não uso campo parâmetro, pode ser FormulaField ou TextField, pois o que preciso é só trocar o texto exibido nesse campo que não tem nenhuma relação com os valores do banco de dados.
Alguém tem ideia de onde estou errando?
Bom dia, depois de perder 03 dias pesquisando e testando, consegui achar a solução para passagem de valores do relatório principal para o subrelatório.
O conceito é usar variáveis compartilhadas do CR.
No relatório principal crie uma variável com nome PassarValor e dentro o código abaixo:
Agora no subrelatório crie a mesma variável, e inclua o código:
O detalhe para funcionar é que a variável (FormulaField que você criou = PassarValor ) deve obrigatoriamente estar dentro do relatório principal, não apenas declarada. Se não quiser que ela fique visÃvel no relatório principal (impressa), basta incluÃ-la em alguma seção oculta e pronto.
O conceito é usar variáveis compartilhadas do CR.
No relatório principal crie uma variável com nome PassarValor e dentro o código abaixo:
WhilePrintingRecords;
shared stringVar VariavelCompartilhada := [Ô]Meu Texto a ser exibido aqui[Ô]
Agora no subrelatório crie a mesma variável, e inclua o código:
WhilePrintingRecords;
Shared StringVar VariavelCompartilhada ;
VariavelCompartilhada
O detalhe para funcionar é que a variável (FormulaField que você criou = PassarValor ) deve obrigatoriamente estar dentro do relatório principal, não apenas declarada. Se não quiser que ela fique visÃvel no relatório principal (impressa), basta incluÃ-la em alguma seção oculta e pronto.
Tópico encerrado , respostas não são mais permitidas