Jasper reports 使用iReport在条件的文本字段中设置背景色

Jasper reports 使用iReport在条件的文本字段中设置背景色,jasper-reports,ireport,Jasper Reports,Ireport,我对iReport中的conditionalStyle有问题。我有以下文本字段(${nameField}=字段值): ${field1}=30${field2}=40${field3}=50 ${field4}=23${field5}=1${field6}=45 ${field7}=34${field8}=20${field9}=0 我需要根据字段的值在每个文本字段中设置不同的背景。我创建新样式并设置条件: <style name="ColoredField"> <con

我对iReport中的conditionalStyle有问题。我有以下文本字段(${nameField}=字段值):

${field1}=30${field2}=40${field3}=50
${field4}=23${field5}=1${field6}=45
${field7}=34${field8}=20${field9}=0

我需要根据字段的值在每个文本字段中设置不同的背景。我创建新样式并设置条件:

<style name="ColoredField">
   <conditionalStyle>
     <conditionExpression><![CDATA[$F{field1} == 300]]></conditionExpression>
    <style mode="Opaque" backcolor="#FCFF00"/>
    </conditionalStyle>
</style>


如您所见,该样式仅使用
$F{field1}
,我需要创建一个应用于每个文本字段的动态样式(或其他样式)

你的问题不清楚,你能说得更清楚些吗

  • 根据我的理解,每个值都意味着文本字段的特定背景,在这种情况下,条件样式值应该取决于变量。也许在你的风格中使用变量可以满足你的需要

  • 在每个样式下添加多个条件样式,如下所示:

  • 每个文本字段现在可以有不同的背景:

    <style name="ColoredField">
       <conditionalStyle>
         <conditionExpression><![CDATA[$F{field1} == 100]]></conditionExpression>
        <style mode="Opaque" backcolor="#FCFFFF"/>
        </conditionalStyle>
        <conditionalStyle>
         <conditionExpression><![CDATA[$F{fiCeld1} == 200]]></conditionExpression>
        <style mode="Opaque" backcolor="#00FF00"/>
        </conditionalStyle>
        <conditionalStyle>
         <conditionExpression><![CDATA[$F{field1} == 300]]></conditionExpression>
        <style mode="Opaque" backcolor="#FCFF00"/>
        </conditionalStyle>
    </style>
    

    我找不到直接的方法来完成这项任务-您必须为每个字段创建一个单独的样式

    考虑到这一点,您可以将精力集中在创建一个小脚本上,该脚本可以用相同的方式为您拥有的字段复制XML。然后,您可以将XML复制/粘贴到报表源文件中。每次需要更改样式时,都必须返回到XML生成器。

    尝试以下方法:

    <style name="myStyle" fontName="Arial">
        <conditionalStyle>
            <conditionExpression><![CDATA[new Boolean($V{SANCTION_AMOUNT_MEASURE}.intValue() == 100)]]></conditionExpression>
            <style forecolor="#FF0000" isBold="true"/>
        </conditionalStyle>
        <conditionalStyle>
            <conditionExpression><![CDATA[new Boolean($V{SANCTION_AMOUNT_MEASURE}.intValue() == 200)]]></conditionExpression>
            <style forecolor="#00FF00" isBold="true"/>
        </conditionalStyle>
        <conditionalStyle>
            <conditionExpression><![CDATA[new Boolean($V{SANCTION_AMOUNT_MEASURE}.intValue() == 300)]]></conditionExpression>
            <style forecolor="#0000FF" isBold="true"/>
        </conditionalStyle>
    </style>
    
    
    
    Soulemane谢谢你的回答,好的。实际上,在你的答案中,你在一个名为ColoredField的样式中添加了多个条件(3),但是,如果你看,这个条件只适用于$F{field1}字段,我需要将这个样式应用于每个字段:$F{field2},$F{field3},$F{field4}。但是我不想为每一个字段重复该代码。实现这一点的一种方法是考虑给定颜色的固定值或值范围。例如,100=绿色,200=红色,200=黄色。然后将前面多条件样式中的$F{field1}替换为变量$V{varValueToBg}。这样,您就可以对differnt字段应用相同的样式,因为只要字段的值与某个条件匹配,bgcolor就会出现.Soulemane,但是我如何将每个字段的值分配给变量(在您的示例变量$V{varValueToBg})。我可以修改样式并添加反条件变量。但我不知道如何将每个字段的值赋给变量。(我很抱歉我的英语不好),谢谢你的帮助!