2012-05-23 14 views
6

Tengo una tabla en iReport con 3 campos (A, B, C). Me gustaría imprimir la fila si el campo C no es nulo. Por ejemplo, si tengo 2 registros en mi fuente de datos:Cómo borrar filas en una tabla si una expresión es válida en iReport

  1. A = primera, B = segundo, C = tercera

  2. A = arriba, B = abajo, C = NULL

la tabla debe tener solo la primera fila.

He intentado insertar esta expresión en cada celda (en "Imprimir cuando la expresión" propiedad):

!$F{C}.equals(null) 

pero de esta forma el resultado es que la segunda fila está vacía (pero visible).

Editar: después de la primera respuesta (ahora borrado) las columnas de la tabla son algo así como:

<jr:column ...> 
<jr:columnHeader ...> 
    <staticText> 
    <reportElement .../> 
     <text><![CDATA[ID]]></text> 
    </staticText> 
</jr:columnHeader> 
<jr:detailCell ...> 
    <textField isBlankWhenNull="false"> 
    <reportElement ... isRemoveLineWhenBlank="true"> 
     <printWhenExpression><![CDATA[$F{ID}!=null]]></printWhenExpression> 
    </reportElement> 
     <textFieldExpression><![CDATA[$F{ID}]]></textFieldExpression> 
    </textField> 
</jr:detailCell> 
</jr:column> 
<jr:column ...> 
<jr:columnHeader ...> 
    <staticText> 
     <reportElement .../> 
     <text><![CDATA[CITY]]></text> 
    </staticText> 
</jr:columnHeader> 
<jr:detailCell ...> 
    <textField isBlankWhenNull="false"> 
     <reportElement ... isRemoveLineWhenBlank="true"> 
      <printWhenExpression><![CDATA[$F{ID}!=null]]></printWhenExpression> 
     </reportElement> 
     <textFieldExpression><![CDATA[$F{CITY}]]></textFieldExpression> 
    </textField> 
</jr:detailCell> 
</jr:column> 

La fuente de datos es un archivo XML. Lo he intentado también con isBlankWhenNull="true" pero sin cambios. Aquí una pantalla del resultado: tab

+0

¿Se puede publicar la captura de pantalla del informe resultante? –

+0

@AlexK Actualizado. – Baduel

+0

Sí, este es un problema. Alguien ya ha publicado [el mismo caso en jasperforge.org] (http://jasperforge.org/plugins/espforum/view.php?group_id=102&forumid=103&topicid=91738) foro. –

Respuesta

1

Cuando coloca la impresión cuando se expresa en el campo, solo se eliminará el campo. Por lo tanto, el espacio permanecerá. Pon la misma expresión en la banda de detalles y vuelve a intentarlo.

Editar:

Mirando el problema adicional, me he dado cuenta que no hay opción de omitir registros (imprimir Cuando la expresión) con el nivel de detalle del elemento de la tabla. Esa opción no existe, como puede ver en iReport y también en el schema definition. Además, el motivo por el que isBlankWhenNull="true" no funciona es porque, aunque el campo de texto está vacío, la fila de detalles aún ocupa la altura asignada. Además, PrintWhenExpression que intentó modificar se aplica a toda la tabla y no a la fila. Por lo tanto, no parece que sea posible hacer de la manera que esperabas.

Aquí voy a dar estos pasos para resolver el problema:

  1. actualización de la consulta XPath para el establecimiento de gestión conjunto de datos (clic derecho> Modificar tabla de fuente de datos de vista del diseñador de mesa) para que los registros donde C es null se omiten.
  2. Elija su sub conjunto de datos y seleccione "Usar expresión de origen de datos" del menú de expresión Conexión/Origen de datos.
  3. insertar la siguiente expresión:

((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("/root[c!='']")

buena suerte.

+0

No puedo usar esta expresión en la banda de detalles por dos razones: 1) el campo no es visible a nivel de banda de detalle (está en un conjunto de datos secundario); 2) Incluso si el punto 1 fuera falso, si pongo la expresión en la banda de detalles, entonces toda la banda (y por lo tanto toda mi tabla) no será visible. – Baduel

+0

Vaya, no me di cuenta de que estaba usando sub conjunto de datos. ¿Ha considerado filtrar los valores nulos en la consulta? – user845279

+0

No, el formato xml es reparado y creado por un sistema externo. – Baduel

1

Encontré otra solución a este problema: Para el conjunto de datos utilizado para la tabla, agregar una expresión de filtro, p. $ F {dateRemoved} == null.

De esta forma se eliminarán las filas vacías.

Cuestiones relacionadas