2012-04-13 17 views
0

我已經從我的參數中輸入了名字kem的輸入列表。它是kem 1,kem 2,kem 3。我已經創建了$x{in,pd_id,Kem}作爲參數,但結果僅顯示了從三kem的kem 1。我想要的是當我把kem的列表名稱,數據將顯示所有的數據。那就是kem 1,kem 2,kem 3。 這是我的代碼:當參數列表多於一個時,如何設置textfield

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="testspace" language="javascript" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> 
    <parameter name="kem" class="java.util.Collection"> 
     <defaultValueExpression><![CDATA[]]></defaultValueExpression> 
    </parameter> 
    <queryString> 
     <![CDATA[select 
PD_ID, 
PD_NAME 
from wf_proc_def where $X{IN,PD_ID,kem}]]> 
    </queryString> 
    <field name="PD_ID" class="java.math.BigDecimal"/> 
    <field name="PD_NAME" class="java.lang.String"/> 
    <background> 
     <band splitType="Stretch"/> 
    </background> 
    <title> 
     <band height="79" splitType="Stretch"> 
      <textField isBlankWhenNull="true"> 
       <reportElement x="118" y="24" width="334" height="20"/> 
       <textElement/> 
       <textFieldExpression><![CDATA[ ("1".equals($P{kem})) ? "kem1" 
:("2".equals($P{kem})) ? "kem2" 
:("3".equals($P{kem})) ? "kem3" 
:("4".equals($P{kem})) ? "kem4" 
:("5".equals($P{kem})) ? "kem5" 
:null]]></textFieldExpression> 
      </textField> 
     </band> 
    </title> 
</jasperReport> 
+0

你可以張貼JRXML文件的片段(與參數,查詢和'textField')? – 2012-04-13 08:04:02

+0

即時回覆很抱歉,我已將我的代碼放在上面。希望你能幫助我。 – 2012-04-15 01:55:55

回答

2

我想與你的參數kem不對勁必須包含的值的列表。你應該初始化這個參數。

這是工作的樣品(它的iReport的樣本數據庫中運行):

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport ..> 
    <parameter name="cities" class="java.util.List"> 
     <defaultValueExpression><![CDATA[Arrays.asList(new String[] {"Dallas", "Lyon", "Paris"})]]></defaultValueExpression> 
    </parameter> 
    <queryString> 
     <![CDATA[SELECT ID, CITY FROM ADDRESS WHERE $X{IN,CITY,cities}]]> 
    </queryString> 
    <field name="ID" class="java.lang.Integer"/> 
    <field name="CITY" class="java.lang.String"/> 
    <title> 
     <band height="79" splitType="Stretch"> 
      <textField> 
       <reportElement x="0" y="12" width="100" height="20"/> 
       <textElement/> 
       <textFieldExpression><![CDATA[$P{cities}]]></textFieldExpression> 
      </textField> 
     </band> 
    </title> 
    <detail> 
     <band height="20" splitType="Stretch"> 
      <textField> 
       <reportElement x="0" y="0" width="100" height="20"/> 
       <textElement/> 
       <textFieldExpression><![CDATA[$F{CITY}]]></textFieldExpression> 
      </textField> 
      <textField> 
       <reportElement x="100" y="0" width="100" height="20"/> 
       <textElement/> 
       <textFieldExpression><![CDATA[$F{ID}]]></textFieldExpression> 
      </textField> 
     </band> 
    </detail> 
</jasperReport> 

iReport預覽功能所產生的結果是: Result generated via iReport preview

UPDATE

如何通過鍵來解析值與google guava庫的幫助下

樣本:

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport ..> 
    <import value="com.google.common.collect.*"/> 
    <import value="com.google.common.base.*"/> 
    <parameter name="cities" class="java.util.List"> 
     <defaultValueExpression><![CDATA[Arrays.asList(new String[] {"1", "2", "3"})]]></defaultValueExpression> 
    </parameter> 
    <parameter name="citiesMap" class="java.util.Map"> 
     <defaultValueExpression><![CDATA[new ImmutableMap.Builder<String, String>().put("1", "Dallas").put("2", "Lyon").put("3", "Paris").build()]]></defaultValueExpression> 
    </parameter> 
    ... 
    <title> 
     <band height="79" splitType="Stretch"> 
      <textField> 
       <reportElement x="0" y="12" width="100" height="20"/> 
       <textElement/> 
       <textFieldExpression><![CDATA[$P{cities}]]></textFieldExpression> 
      </textField> 
      <textField> 
       <reportElement x="185" y="12" width="100" height="20"/> 
       <textElement/> 
       <textFieldExpression><![CDATA[Maps.filterKeys($P{citiesMap}, Predicates.in($P{cities})).values()]]></textFieldExpression> 
      </textField> 
     </band> 
    </title> 
    ... 
</jasperReport> 

結果將是: enter image description here

+0

我已經嘗試過您的示例,但有錯誤。實際上,我希望參數是輸入名稱=「ID」而不是「城市」。當我把ID列表,它會顯示報告desc城市。例如ID 1 ='達拉斯',2 =巴黎和3 = Lycon.How怎麼辦? – 2012-04-16 07:27:02

+0

在我的示例中,「ID」是「地址」對象的PK,而不是「城市」對象。示例正在運行 - 您有什麼錯誤?順便說一句,對於這個示例,報告的語言必須設置爲'Java'。 – 2012-04-16 09:49:13

+0

我有嘗試,但結果不是我想要的。我想要的是當id 1 ='達拉斯',2 =巴黎和3 = Lycon時的情況 – 2012-04-16 11:01:31

相關問題