2016-08-28 73 views
2

我目前正在編寫簡單的java應用程序,它將數據從csv讀取到jTable並生成報告(.jrxml - > .jasper)。從JTable獲取數據時,我應該使用fillReport方法中的參數嗎?

收集的ArrayList中的參數映射像這樣的:

[{Description = 'qwerty', Title = 'asdfg', Amount = 1800}, 
{Description = 'uiop', Title = 'zxcv', Amount = 2500},  
{Description = 'desc', Title = 'mnb', Amount = 510}] 

我怎樣才能把它傳遞給fillReport方法(它需要java.util.map)? 或者,也許我必須使用字段,而不是參數?

編輯: 這裏有預期的輸出 - 充滿JTable中,並從它的數據在jasperView:

enter image description here

這裏是我的代碼 - 我從JTable中獲取數據源:

JRDataSource dataSource = new JRTableModelDataSource(dataTable.getModel()); 
      try { 
       JasperCompileManager.compileReportToFile("citibank_customReport.jrxml"); 
       JasperPrint print = JasperFillManager.fillReport("citibank_customReport.jasper", listOfParameters, dataSource); 
       JasperViewer.viewReport(print, true); 
      } 

不幸的是,fillReport方法不理解hashmaps數組。我如何糾正它?

+0

@PetterFriberg我試圖改進我的問題,也許現在更容易理解確切的問題? – gooornik07

+0

是的,謝謝,你不需要使用參數,看到答案,你已經在你的數據源中的所有數據,你傳遞給fillManager –

回答

2

你做需要使用的參數,你已經在數據的dataSource您已經傳遞給JasperFillManager

您簡單需要定義具有相同的名稱和類的字段中輸入您在您的jrxml(報告)中的JTable模型dataTable.getModel()中的列。

(COLUMNNAME是col1並且它是一個java.lang.String

<field name="col1" class="java.lang.String"/> 

碧玉報告將詳細帶遍歷所有的行在該模型中和當前列值設置爲等領域,因此你應該將textField引用詳細帶中的字段$F{col1}

+0

所以我必須改變我的報告設計中的所有$ P(參數) $ F(fields)和dataSource將提供答案。另一個queston - fillReport方法需要:jasper報告,PARAMETERS和dataSource。我需要做什麼與這種方法的第二個參數? – gooornik07

+1

數據源(3參數)在詳細波段上迭代,參數(2參數)是可以發送報告的固定值,報告示例標題,圖像路徑等。 –

+0

瞭解「參數」和「字段」在報表設計解決了我的問題:)現在JasperViewer顯示我的預期:) – gooornik07

相關問題