[quote=savoine]Consegui resolver, no subreport do report principal em “Subreport properties --> Parameters” adicionei um parametro NAME=Id EXPRESSION=$F{Id}
Depois dentro do subReport criei um parametro de nome Id do tipo Integer e depois em “More --> Filter Expression” adicionei $F{Id}.equals($P{Id})[/quote]
Olá Savoine, como ficou seu código no java para esse tipo de relatório com JRBeanDatasource com subojetos? Estou com um problema idêntico ao seu.
Realizei o filterExpression mas não adiantou n.
eu crio uma lista de JRBeanCollectionDataSource, dentro de cada objeto dessa lista eu crio mais uma lista do tipo JRBeanCollectionDataSource para poder montar o subrelatorio
exemplo
public class Teste {
private String teste1;
private String teste2;
private JRBeanCollectionDataSource lista;//aqui tem sua lista que monta o subrelatorio
}
no subrelatorio no atributo data source expression vc coloca o $F{lista}, pronto agora é só usar os atributos dessa lista interna no subrelatorio.
Consegui…
Seguite:
Tenho a seguinte classe exemplo:
class Axxx {
int x1; //atributo identificador
int x2;
int x3;
List objetoBList;
}
class B {
int y1; ///atributo identificador
int y2;
Axxx a;
}
No Ireport, relatório principal eu la na aba de conexão->JavaBean Data Source eu escolho a classe Axxx;
No componente subreport, na propriedade Connection Type deixe Use a Data Source expression e na propriedade Data Source Expression use sua List/Collection, no caso do exemplo ficaria new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{objetoBList}) e na propriedade Parameters Map Expression passe o $P{REPORT_PARAMETERS_MAP} do relatório principal (fazendo com que o subrelatório receba também todos os parâmetros que foram passados para o relatório principal).
Ainda no relatório principal adicione um parâmetro que será utilizado como filtro de expressão para o subreport, no meu caso utilizei o campo identificador x1.
No Subreport vc escolhe como conexao o JavaBean Data Source do da classe B e na propriedade do subreport Filter Expression adicione um filtro no qual vc definiria a filtragem de para cada Objeto Axxx imprima todos os objetos da classe B B, mais ou menos assim: $P{x1}.equals($F{a}.getx1())
Tentarei realizar uma "VÍDEO DICA", postar no youtube e deixar o link aqui.
na verdade vc está fazendo errado, não precisaria passar esse Filter Expression, pois na sua coleçao só deveria ter dados associados a ele, dai vc nao precisaria bater chave, vc esta precisando fazer isso pois está passando coisas q nao são dele.
Uma coisa que eu penso em relatório ireport é, fazer tudo em java e nunca ficar colocando muita regra no ireport, dai fica mais facil dar manutençao.
[quote=eduJava]na verdade vc está fazendo errado, não precisaria passar esse Filter Expression, pois na sua coleçao só deveria ter dados associados a ele, dai vc nao precisaria bater chave, vc esta precisando fazer isso pois está passando coisas q nao são dele.
Uma coisa que eu penso em relatório ireport é, fazer tudo em java e nunca ficar colocando muita regra no ireport, dai fica mais facil dar manutençao.[/quote]
Certo eduJava! O Filter Expression não se faz necessário se o “Objeto Principal(do relatório principal)” e o subreport estão na mesma banda!