Array com iReport

3 respostas
leodamasceno

Olá pessoal, estou tentando incluir os dados de um array no ireport, segue meu código abaixo:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Relatorio;

import MetodosVenda.Metodos;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanArrayDataSource;
import net.sf.jasperreports.engine.data.JRMapArrayDataSource;
import net.sf.jasperreports.view.JasperViewer;

/**
 *
 * @author damasceno
 */
public class CriarRelatorio {

    
    public static String data;
    public static String mesa;
    public static String valor;
    
    
    public static void Gerar(String valorfinal, String[] dataparam, String[] mesaparam, Double[] valorparam, int contador) {
        
        try {
           
           
            Map mapa = new HashMap();
            
            for (int i = 1; i < contador+1; i++) {
                
                data = dataparam[i];
                mesa = mesaparam[i];
                valor = Metodos.MetodoTransformaPontoEmVirgula(Metodos.MetodoFormatarCasasDecimais(valorparam[i]));
  
                
                mapa.put("data", data);
                mapa.put("mesa", mesa);
                mapa.put("valor", valor);
                
                
                
            }
            
            
            mapa.put("valorfinal", valorfinal);
            
            
            JRDataSource jrds = new JREmptyDataSource();
            
            JasperPrint jasperPrint = JasperFillManager.fillReport("/Users/damasceno/NetBeansProjects/Projeto01/src/Relatorio/relatoriofinanceiro.jasper", mapa,jrds);    
            JasperViewer jasperviewer = new JasperViewer(jasperPrint,false);
            
            jasperviewer.setTitle("Relatório financeiro - EMPRESA");
            jasperviewer.setVisible(true);
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        
    }
    
    
}

Problema: Os dados estão dentro de um FOR, logo na minha consulta atual dois resultados estão sendo retornados, porém apenas o segundo é exibido. Já procurei aqui no GUJ e em outros sites mas até agora não achei uma solução. Desde já, agradeço a ajuda.

3 Respostas

Danilo_Carvalho

Boa tarde!

utilize

JRBeanCollectionDataSource datasource = new JRBeanCollectionDataSource(yourArrayList);

Utilize o código acima assim você pode passar o arrayList para o Ireport e dentro do Ireport você cria os fields de acordo com a usa entidade,
da maneira que você esta fazendo você continua passando tudo por parâmetros e está usando o parâmetros ao invés do fileds no details por isso somente o segundo valor
e exibido pois o parâmetro esta sendo sobrescrito a cada iteração do for.

Qualquer coisa posta ai.

leodamasceno

Obrigado pela rápida resposta, mas neste caso não seria indicado utilizar JRBeanArrayDataSource? Se sim, como eu faria para inserir os três arrays? Pois no iReport eu tenho três colunas: Data, Mesa, Valor, entende?

Para adiantar, quando utilizei JRBeanArrayDataSource, recebi este erro:

net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : status

status é uma das colunas da minha tabela, mas como pode aparecer isso se o ireport não está diretamente ligado ao banco de dados? Pelo menos no código não mostra isso.

leodamasceno

Fiz alguns testes e parei nesta parte:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Relatorio;

import MetodosVenda.Metodos;
import java.awt.List;
import java.sql.Array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanArrayDataSource;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.data.JRMapCollectionDataSource;
import net.sf.jasperreports.view.JasperViewer;

/**
 *
 * @author damasceno
 */
public class CriarRelatorio {

    
    public static String data;
    public static String mesa;
    public static String valor;
 
    
    
    public static void Gerar(String valorfinal, String[] dataparam, String[] mesaparam, Double[] valorparam, int contador) {
        
        try {
           
            Map mapa = new HashMap();
           
                
           ArrayList dados = new ArrayList(); 
            dados.add("data");
            dados.add("mesa");
            
            
           JRDataSource ds = new JRBeanCollectionDataSource(dados);

            
            
            JasperPrint jasperPrint = JasperFillManager.fillReport("/Users/damasceno/NetBeansProjects/Projeto01/src/Relatorio/relatoriofinanceiro.jasper", mapa,ds);    
            JasperViewer jasperviewer = new JasperViewer(jasperPrint,false);
            
            jasperviewer.setTitle("Relatório financeiro - EMPRESA");
            jasperviewer.setVisible(true);
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        
    }
    
    
}

Agora estou vendo este erro:

net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : data
	at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:123)
	at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getFieldValue(JRAbstractBeanDataSource.java:96)
	at net.sf.jasperreports.engine.data.JRBeanCollectionDataSource.getFieldValue(JRBeanCollectionDataSource.java:100)
	at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:1330)
Criado 8 de janeiro de 2013
Ultima resposta 8 de jan. de 2013
Respostas 3
Participantes 2