2012-05-23 18 views
6

3 alanlı (A, B, C) bir iReport tablosum var. Satır alanını yazdırmak istiyorum C alanı boş değil.Bir tablonun içinde bir satır nasıl silinir? IReport

  1. bir = birinci, B = ikinci, C = üçüncü

  2. A = yukarı, B = Aşağı C = NULL

: Örneğin, benim veri kaynağı 2 kayıt varsa

tablonun sadece ilk satıra sahip olması gerekir.

ben her hücrede bu ifadeyi ekleyerek denedim (içinde "Print zaman ifadesi" mülkiyet):

!$F{C}.equals(null) 

ancak bu şekilde sonuç ikinci sıra boş (ama görünür) olmasıdır

.

Düzenleme:

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

veri kaynağına bir xml dosyasıdır: ilk yanıt (şimdi sildim) sonra tablodaki kolonlar gibi bir şey vardır. Ayrıca isBlankWhenNull="true" ile denedim ama değişiklik yapmadan. Burada bir sonuç ekranı:

+0

Sonuç raporunun ekran görüntüsünü kaydeder misiniz? –

+0

@AlexK Güncellendi. – Baduel

+0

Evet, bu bir problem. Birisi zaten [aynı davada jasperforge.org] (http://jasperforge.org/plugins/espforum/view.php?group_id=102&forumid=103&topicid=91738) forumunu yayınladı. –

cevap

1

Baskıyı alana yazdığınızda, sadece alan kaldırılır. Dolayısıyla, boşluk kalacak. Aynı ifadeyi ayrıntı bandına koyun ve tekrar deneyin.

Düzenleme

: Daha fazla sorun baktığımızda

, ben masa elemanının detay seviyesinde kayıtları aktarmak hiçbir seçenek (Baskı İfade) bulunmaktadır fark ettik. Bu seçenek, iReport'ta ve schema definition'da da görebileceğiniz gibi mevcut değildir. Ayrıca, isBlankWhenNull="true"'un çalışmadığı nedeni, metin alanı boş olsa bile, ayrıntı satırı hala ayrılan yüksekliği alır. Ayrıca, değiştirmeyi denediğiniz PrintWhenExpression, satır değil, tüm tabloya uygulanır. Yani umduğun gibi yapmak mümkün gibi görünmüyor. İşte

Sana sorunu çözmek için şu adımları verecektir:

  1. Güncelleme sizin veri kümesi çalıştırmak özelliğine XPath sorgusu (sağ tık> tablo tasarımcı görünümünden düzenlemek tablo veri kaynağı), böylece C kayıtlar boş bırakıldı.
  2. Alt veri kümenizi seçin ve Bağlantı/Veri kaynağı ifade menüsünden "Veri kaynağı ifadesini kullan" seçeneğini belirleyin.

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

İyi Şanslar:

  • aşağıdaki ifadeyi ekleyin.

  • +0

    Bu ifadeyi, ayrıntı bandında iki nedenden dolayı kullanamıyorum: 1) alan, ayrıntılı bant düzeyinde görünmüyor (alt veri kümesinde); 2) Eğer 1 noktası yanlış olsa bile, eğer ifadeyi detay bandına koyarsam, o zaman tüm bant (ve tüm masam) görünmeyecektir. – Baduel

    +0

    Oops, sry alt veri kümesini kullandığınızı farketmedim. Sorgudaki boş değerleri filtrelemeyi düşündünüz mü? – user845279

    +0

    Hayır, xml biçimi sabit ve harici bir sistem tarafından oluşturulur. – Baduel

    1

    Bu soruna başka bir çözüm buldum: Tablo için kullanılan veri kümesi için, bir Filter İfadesi ekleme, örn. $ F {dateRemoved} == null.

    Bu şekilde boş satırlar kaldırılacak.

    İlgili konular