Ver Mensaje Individual
  #217 (permalink)  
Antiguo 24/06/2005, 02:22
inmadgm
 
Fecha de Ingreso: mayo-2003
Ubicación: en sevilla
Mensajes: 3
Antigüedad: 21 años, 7 meses
Puntos: 0
Hola... soy nueva en esto y queria preguntaros como podria diseñar con el iReport un informe si en el código java le paso al metodo fillReport un DataSource en vez de una conexión.

Object available_data[]={matri_stock,n_refer,proced,p_compra,
tip_iva,prev_rea,c_total,p_venta,f_compra,sed,f_ma tric,tot_vehic};
JList myList = new JList(available_data);
MyDataSource dataSource = new MyDataSource(myList);

JasperPrint reporte = JasperFillManager.fillReport("C:\\Documents and Settings\\Inma\\Mis documentos\\SRC\\Propios\\Listados Tecsa\\TStock.jasper", parameters,dataSource);

matri_stock, n_refer...seria vectores.

y mi clase MyDataSource seria esta:

package listados_tecsa;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;
import java.util.Vector;



public class MyDataSource implements JRDataSource {
private Object[][] data; // data source structure
private int index = -1; // current record index

public MyDataSource(javax.swing.JList myList) {
/* int numero_righe=myList.getModel().getSize();
int numero_colonne=12;
data = new Object[numero_righe][numero_colonne];
for(int x=0;x<numero_righe;x++){
Object ob=myList.getModel().getElementAt(x);
Vector v=(Vector)ob;
for(int y=0;y<numero_colonne;y++){
data[x][y]=v.elementAt(y);
}
}*/
int numero_colonne=myList.getModel().getSize();
Object obj=myList.getModel().getElementAt(0);
Vector ve=(Vector)obj;
int numero_righe=ve.size();
data = new Object[numero_righe][numero_colonne];

for(int x=0;x<numero_colonne;x++){//0 al 12
Object ob=myList.getModel().getElementAt(x);
Vector v=(Vector)ob;
for(int y=0;y<numero_righe;y++){
if(v.size()==7){
data[y][x] = v.elementAt(y);
}else{
data[y][x]="";
}
}
}


}

// called in net.sf.jasperreports.engine.fill package from JRBaseFiller.next() method
// to make certain further data exist
public boolean next() throws JRException {
index++;

return (index < data.length);
}

// called in net.sf.jasperreports.engine.fill package from JRBaseFiller.next() method
// to get the right field value by means of column name an current record index
public Object getFieldValue(JRField field) throws JRException {
Object value = null;

String fieldName = field.getName();

if ("MATRÍCULA".equals(fieldName)) {
value = data[index][0];
}
else if ("Nº REF. ART.".equals(fieldName)) {
value = data[index][1];
}
else if ("PROCEDENCIA".equals(fieldName)) {
value = data[index][2];
}
else if ("PRECIO COMPRA".equals(fieldName)) {
value = data[index][3];
}
else if ("TIPO IVA".equals(fieldName)) {
value = data[index][4];
}
else if ("PREV. REACOND.".equals(fieldName)) {
value = data[index][5];
}
else if ("COSTO TOTAL".equals(fieldName)) {
value = data[index][6];
}
else if ("PRECIO VENTA".equals(fieldName)) {
value = data[index][7];
}
else if ("FECHA COMPRA".equals(fieldName)) {
value = data[index][8];
}
else if ("SEDE".equals(fieldName)) {
value = data[index][9];
}
else if ("FECHA 1ª MATRIC.".equals(fieldName)) {
value = data[index][10];
}
else if ("Nº TOTAL VEHÍCULO".equals(fieldName)) {
value = data[index][11];
}




return value;
}

} // end of class

Tambien os queria preguntar si ya no es mucho, como sería tambien el parametro "Map parameters" que le tengo que pasar al método fillReport.

Mucha gracias!!!