2012-09-04 17 views
5

Tôi có một Tiêu đề ban nhạc với một Text Field chứa một tính Biến$V{avg_perc}. Các Text FieldevaluationTime thiết lập để Báo cáo, tương tự cho các BiếnresetType. Bây giờ tôi đang cố gắng để thiết lập màu nền của lĩnh vực này với một Conditional Phong cách nhưng tôi tiếp tục nhận được một thông báo lỗi nói cái gì đó như:Sử dụng các biến trong điều kiện Phong cách

Invalid expression: !Double.isNaN($V{avg_perc}) && $V{avg_perc} >= 0.8 

tôi đang làm chính xác những điều tương tự với cùng Kiểu có điều kiện trong Chân trang cột và nó hoạt động mà không có bất kỳ sự cố nào, ngay cả khi tôi đặt assessmentTime cho trường này thành Báo cáo quá.

Sau khi xóa !Double.isNaN($V{avg_perc}) Tôi không gặp lỗi nữa nhưng biểu thức vẫn không hoạt động. Trường của tôi giữ màu đỏ là màu cơ bản khi không có điều kiện nào hợp lệ, bất kể giá trị nào $V{avg_perc} có. Tuy nhiên, nó vẫn hoạt động trong Chân trang Cột. Đây là phong cách của tôi:

<style name="avg_color" mode="Opaque" backcolor="#FF0000" pdfFontName="Helvetica-Bold"> 
    <conditionalStyle> 
     <conditionExpression><![CDATA[$V{avg_perc} >= 0.8]]></conditionExpression> 
     <style backcolor="#008000"/> 
    </conditionalStyle> 
    <conditionalStyle> 
     <conditionExpression><![CDATA[$V{avg_perc} >= 0.6 && $V{avg_perc} < 0.8]]></conditionExpression> 
     <style backcolor="#FFCC00"/> 
    </conditionalStyle> 
</style> 

Fields đã qua sử dụng và biến cho việc này:

<field name="perc" class="java.lang.Double"/> 
<variable name="avg_perc" class="java.lang.Double" calculation="Average"> 
    <variableExpression><![CDATA[$F{perc}]]></variableExpression> 
</variable> 

Bất kỳ ý tưởng làm thế nào để điều này để làm việc? Tôi đang sử dụng JasperReportsiReport trong phiên bản 3.7.4.

+0

* iReport của bạn là gì * Cài đặt thuộc tính này: *** org.eclipse.jdt.core.compiler.source ***, *** org.eclipse.jdt.core.compiler.tuân thủ ***, *** org.eclipse.jdt.core.compiler.codegen.TargetPlatform ***? –

+0

1.5 cho tất cả chúng – YingYang

+0

Bạn có thể đăng định nghĩa biến *** avg_perc *** không? BTW, biểu thức '! Double.isNaN ($ F {avg_perc}) && $ F {avg_perc}> = 0.8' phù hợp với tôi - Tôi đã thay đổi biến trên trường. –

Trả lời

8

Cuối cùng tôi đã tìm ra giải pháp cho vấn đề của mình. Thêm

<property name="net.sf.jasperreports.style.evaluation.time.enabled" value="true"/> 

ở cấp báo cáo gây ra một Conditional Phong cách được thực hiện tại thời điểm mà tại đó các phần tử được đánh giá. Xem this answer trong Cộng đồng Jaspersoft để biết thêm thông tin.

+0

+1 giải pháp tốt đẹp –

2

trong trình xem thiết kế của bạn.

nhấp vào trường và trong bảng thuộc tính .: markup = styled selected

Nhấp chuột phải vào fied. chỉnh sửa biểu:

($F{fila1}.equals("c") ? "<style forecolor='red'>"+ $F{fila1}+"</style>" : $F{fila1}) 

hoặc xml

<textFieldExpression><![CDATA[($F{fila1}.equals("c") ? "<style forecolor='red'>"+ $F{fila1}+"</style>" : $F{fila1})]]></textFieldExpression> 
0

Sửa đổi mã này dựa trên yêu cầu của bạn

<style name="alternateStyle" fontName="Arial"> 
    <conditionalStyle> 
     <conditionExpression><![CDATA[new Boolean($V{AMOUNT}.intValue() == 0)]]></conditionExpression> 
     <style mode="Opaque" backcolor="#FF0000" isBold="true"/> 
    </conditionalStyle> 
</style> 

Và cũng tham khảo liên kết này: Link