2012-09-24 78 views
1

執行報告時,如何指定子數據查詢我有一個主查詢主報表和(與子數據)在它的內部,它有自己的查詢從Java應用程序

我知道如何指定主報告查詢,但我不知道怎麼在創建報告我的Java代碼指定subdatset查詢

任何人都可以幫忙嗎?

我的代碼:

public static java.sql.Connection cx = Connexion.SetConOn(); 

public static void Create report(String Query, String model, String title, String art) { 
    try { 
     JRDesignQuery jrd = new JRDesignQuery(); 
     JasperDesign design = JRXmlLoader.load(model); 
     jrd.setText(Query); 
     design.setQuery(jrd); 
     Map map = new HashMap(); 
     JasperReport etat = JasperCompileManager.compileReport(design); 
     JasperPrint print = JasperFillManager.fillReport(etat, map, cx); 
     File f = new File("C:\\" + fdg); 
     f.mkdir(); 
     JasperExportManager.exportReportToPdfFile(print, f.getPath() + "\\" + title + ".pdf"); 
     JasperViewer jv = new JasperViewer(print, false, Locale.FRENCH); 

     try { 
      java.awt.image.BufferedImage bi = javax.imageio.ImageIO.read(jv.getClass().getResource("/cycloplan/Images/Burn-icon1.png")); 
      javax.swing.ImageIcon myImg = new javax.swing.ImageIcon(bi); 
      jv.setIconImage(myImg.getImage()); 

     } catch (java.io.IOException ex) { 
      ex.printStackTrace(); 
     } 

     jv.setTitle(title); 
     jv.setAlwaysOnTop(true); 
     jv.setVisible(true); 
    } catch (JRException ex) { 
     ex.printStackTrace(); 
    } 
} 

回答

1

JasperDesign類有幾種不同的方式來訪問子數據集;看看javadoc [link]。我認爲下面的代碼應該可以設置子數據集查詢,其中subQueryString是您要使用的查詢,而datasetName是給JRXML中子數據元素的名稱。

JRDesignQuery subQuery = new JRDesignQuery(); 
subQuery.setText(subQueryString); 
Map<String, JRDataset> datasetMap = design.getDatasetMap(); 
JRDesignDataset subDataset = (JRDesignDataset) datasetMap.get(datasetName); 
subDataset.setQuery(subQuery); 

(*我並沒有實際測試此代碼。YMMV)

+0

這是非常有幫助非常感謝你。 –