1

我有一个主报告,其中有一个主查询和一个(带有subdataset),其中有自己的Query

我知道如何为主报告指定查询,但我不知道如何在我的创建报告的 Java 代码中为子数据集指定查询。

有人可以帮忙吗?

我的代码:

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();
    }
}
4

1 回答 1

1

该类JasperDesign有几种不同的方式来访问子数据集;看看 javadoc [链接]。我认为以下代码应该可以设置子数据集查询,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)

于 2012-09-26T11:59:28.070 回答