2012-09-24 33 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

这是非常有帮助非常感谢你。 –