[RESOLVIDO] Ireport - SubReport através JRBeanCollectionDataSource

Criei um subreport e no Data Source Expression informei [color=red]new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{report})[/color]

Ate ai blz… ele compila e gera o relatorio, o problema é que ele lista todos os subitens dentro de cada item.

Exemplo:

[color=blue]ADMINISTRATIVO[/color]
-USUARIOS
-DEPARTAMENTOS
-FILIAIS

[color=blue]FINANCEIRO[/color]
-USUARIOS
-DEPARTAMENTOS
-FILIAIS

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=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.

cara eu faço tudo sempre pelo java

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;
}
  1. No Ireport, relatório principal eu la na aba de conexão->JavaBean Data Source eu escolho a classe Axxx;
  2. 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).
  3. 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.
  4. 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!