2016-07-01 15 views
2

私はこのような簡単な問題を少しでも抱えています。 DynamicReportsを使用していて、列の値がnullの場合は行全体を非表示にしたい私が知っているようにDynamicReportsはJasperReportsに基づいており、TextFieldのオプション「空白のときに行を削除する」をチェックすることで可能です。ダイナミックではどうしたらいいですか?私が使用列がnullの場合、DynamicReportsの行が削除されます

コンポーネント、:

TextColumnBuilder, ColumnGroupBuilder, JasperReportBuilder 

私は私のTextColumnsのいずれかがNULLであるかどう行全体を非表示にします。

答えて

1

OK、いくつかの考えの後、私はこの問題が別の方法で解決できることを発見しました。

我々は、列、グループなどのプロパティsetPrintWhenExpression(DRIExpression expression)

1.が行を印刷するように処理するクラス、プリントを作成するか、または使用していないのつもり。

public class ShowExpressionDynamicReports extends AbstractSimpleExpression<Boolean> { 

    private String fieldName; 

    public ShowExpressionDynamicReports(String fieldName) { 
     this.fieldName = fieldName; 
    } 

    @Override 
    public Boolean evaluate(net.sf.dynamicreports.report.definition.ReportParameters reportParameters) { 
     return reportParameters.getValue(fieldName) != null; 
     } 
    } 

あなたが以下に列挙されているメソッドにパラメータとして渡すためにAbstractSimpleExpressionを拡張する必要があります:ダイナミックは、これを行うための抽象クラスを持っています。

evaluate(ReportParameters rp)がtrueを返した場合、列の値が出力されます。

フィールドfieldNameを追加しました。これは、の他の列の状態のために、私が列を印刷できるようにしました。

2.あなた

列にプロパティを追加します。

setPrintWhenExpression(DRIExpression expression)

グループ:

.setPrintSubtotalsWhenExpression(DRIExpression expression)

または

setFooterPrintWhenExpression(DRIExpression expression)

または

setHeaderPrintWhenExpression(DRIExpression expression)

を非表示にするかに依存します。

例:製品とProductCount列:

私たちはレポートの2列を持っています。 ProductCountがnullの場合、Product列を非表示にしたいと考えています(この製品に関する情報はありません)。私は、製品の列

TextColumnBuilder<String> productColumn = col.column("Product", "Product", type.stringType()) 
.setPrintWhenExpression(new ShowExpressionDynamicReports("ProductCount")); 
にプロパティ PrintWhenExpressionを追加することをやることが

関連する問題