7

iReport に 3 つのフィールド (A、B、C) を持つテーブルがあります。フィールドCがnullでない場合、行を印刷します。たとえば、データ ソースに 2 つのレコードがあるとします。

  1. A = 1 番目、B = 2 番目、C = 3 番目

  2. A = 上、B = 下、C = NULL

テーブルには最初の行のみが含まれている必要があります。

この式を各セルに挿入しようとしました(「式を印刷する」プロパティで):

!$F{C}.equals(null)

しかし、この方法では、結果として 2 番目の行は空になります (ただし表示されます)。

編集:最初の回答(現在は消去)の後、表の列は次のようになります。

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

データ ソースは xml ファイルです。私も試してみましisBlankWhenNull="true"たが、変化はありません。結果の画面は次のとおりです。 タブ

4

3 に答える 3

1

フィールドに print when 式を配置すると、フィールドのみが削除されます。したがって、スペースが残ります。ディテール バンドに同じ式を付けて、もう一度試してください。

編集:

問題をさらに詳しく見てみると、テーブル要素の詳細レベルでレコード (Print When Expression) を省略するオプションがないことに気付きました。iReport やschema definitionで確認できるように、そのオプションは存在しません。さらに、isBlankWhenNull="true"テキストフィールドが空であっても、詳細行がまだ割り当てられた高さを占めているため、機能していません。また、変更しようとした PrintWhenExpression は、行ではなくテーブル全体に適用されます。したがって、あなたが望んでいた方法を行うことは不可能のようです。

ここでは、問題を解決するための次の手順を説明します。

  1. XPath クエリをデータセット実行プロパティに更新し (右クリック > テーブル デザイナー ビューからテーブル データソースを編集)、C が null であるレコードが省略されるようにします。
  2. サブ データセットを選択し、[接続] / [データソース式] メニューから [データソース式を使用] を選択します。
  3. 次の式を挿入します。

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

幸運を。

于 2012-05-25T07:33:38.040 に答える
1

この問題に対する別の解決策を見つけました。テーブルに使用されるデータセットの場合、フィルター式を追加します。たとえば、$F{dateRemoved}==null です。

このようにして、空の行が削除されます。

于 2013-07-17T14:35:23.343 に答える
0

問題に直接答える:

  1. After using -> Print When 式
  2. わずか 1 インチ上に移動し、[空白の場合は行を削除] オプションをオンにします。

  3. 100%稼働

于 2018-03-28T12:27:25.673 に答える