Tabelas no IReport

Olá a todos. Gostaria de perguntar se alguem saberia como montar uma simples tabela dinamica no ireport seguido a mais simples logica: Uma tabela segundo uma matriz. Suponhamos

int [][] x = {{1,2,3},
                   {4,5,6},
                   {7,8,9}};

O que eu gostaria de fazer é com que o Jasper leia estes dados recebidos do Java e crie uma tabelinha 3 x 3 com as variaveis contidas na matriz. O numero de colunas da tabela é fixo, porém o numero de linhas é variavel. È possivel isso ?

Obrigado a atenção. [] ´s

Qual a forma que serão mandados os valores da matriz??
caso for um select que retorna cada linha voce poderia simplemente coloca-lo em uma banda

caso não, de uma olhada em subrelatorios :slight_smile:

veja também este tópico do jorgefrancisco http://www.guj.com.br/posts/list/215925.java

Nao entendi como fora resolvido isto no outro topico. Eu estou passando a matriz atravez de uma classe contida numa coleção de dados (JRBeanCollection). Obrigado pela resposta. []´s

O modo como acabei pensando em fazer apos ler varias matérias sobre isto, é criar um sub-relatório e este, ser construido pelo JasperDesign como o Furutani demonstra na pagina dele: http://www.furutani.com.br/2010/06/relatorio-dinamico-com-jasperdesign/

Eu entendi perfeitamente como eu montaria o Jasper. Eu faria 2 fors para ler minha matriz e iria criando campo por campo da matriz, razoavelmente simples, porém nao tenho ideia de como eu implementaria isto no meu relatório ‘main’. Segue parte do codigo que uso para gerar o Jasper:

List<DadosRelatorioAtestadoMatricula> listaRegistros = new ArrayList<DadosRelatorioAtestadoMatricula>(); listaRegistros.add(dadosR); // passa a lista para a classe JRBeanCollectionDataSource que será a lida pelo Jasper JRBeanCollectionDataSource relatorioDataSource = new JRBeanCollectionDataSource(listaRegistros); // abrindo o arquivo Jasper String arqJasper = "AtestadoMatriculaGrad.jasper"; //if(graduacao) { arqJasper = "AtestadoMatriculaGraduacao.jasper"; } String caminho = this.getClass().getResource("").getPath().toString() + arqJasper; JasperPrint rel = JasperFillManager.fillReport(caminho, parameters, relatorioDataSource); ByteArrayOutputStream byteReport = new ByteArrayOutputStream(); JRPdfExporter exporter = new JRPdfExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, rel); exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, byteReport); exporter.exportReport(); byte[] bytes = byteReport.toByteArray(); this.getResponse().setContentType("application/pdf"); this.getResponse().setContentLength(bytes.length); ServletOutputStream outputStream = this.getResponse().getOutputStream(); outputStream.write(bytes, 0, bytes.length);

Tenho de assumir que como um bom estagiario, nao entendo totalmente o que está sendo feito neste final, logo nao tenho ideias de como gerar um sub-jasper dentro deste jasper. Nao sei o melhor modo de fazer isto, e preciso descobrir. Se nao souberem a resposta , qualquer pequenaa luz é muito apreciada.

[]´s Gabriel

bom isso voce faz lá pelo próprio IReport, usando a opção subreport (subrelatorio) e apartir do relatorio principal enviaria os conteudos para os subrelatorios por parametros :slight_smile:

é bem simples, principalmente nas versões mais novas do IReport
já que voce é estagiario, recomendo ver video-aulas de IReport que em disponiveis na internet (me ajudaram muito), dei uma procurada mas não achei os videos que eu assisti :confused: mas procurando voce acha alguns bons

Obrigado pela resposta Thiago !

Bom, ja entendi como funciona o sub-relatorio, ou pelo menos o basico dele. Acredito que isto pode me ajudar mas nao irá, sozinho, solucionar meu problema. Nao existe maneira de criar um pequeno algoritimo java que importe a matriz para o Jasper e ele desenhe a tabelinha bonitinho ? Eu posso dividir de em vez de uma matriz [X][Y] por apenas um vetor[X] , contendo todas as colunas cada posição do vetor, como sendo uma String cada linha, se isto ajudar, mas ainda nao tenho ideia de como posso fazer algo que ‘varie’, ou se repita, e progrida, comece na posição 1, se repita na posição 2 e assim por diante.

[]´s Gabriel

acho que tive uma ideia…
voce pode criar uma classe que receba a posição e retorne o valor
assim voce vai mandando pro jasper as posições (ou o ultimo valor e voce cria um contador) e o jasper vai mandando pra classe