Jasper reports 在Jaspersoft ireport中创建静态下拉列表

Jasper reports 在Jaspersoft ireport中创建静态下拉列表,jasper-reports,prompt,ireport,jasperserver,java,swing,Jasper Reports,Prompt,Ireport,Jasperserver,Java,Swing,我正在“Jaspersoft iReport designer 5.6.0”中创建一个报告。我想做的是添加一个参数(一个静态列表,其中包含的值有:6个月,3个月…)。当用户选择其中一个选项时,我应该能够在报告查询中获得用户选择的值,以便在选择后提供结果。我不想使用jasper服务器 这可能吗 这是我的疑问: SELECT DISTRICT."DKEY" AS DISTRICT_DKEY, DISTRICT."PROVINCE_ID" AS DISTRICT_PROVINCE_

我正在“Jaspersoft iReport designer 5.6.0”中创建一个报告。我想做的是添加一个参数(一个静态列表,其中包含的值有:6个月,3个月…)。当用户选择其中一个选项时,我应该能够在报告查询中获得用户选择的值,以便在选择后提供结果。我不想使用jasper服务器

这可能吗

这是我的疑问:

SELECT
     DISTRICT."DKEY" AS DISTRICT_DKEY,
     DISTRICT."PROVINCE_ID" AS DISTRICT_PROVINCE_ID,
     DISTRICT."DISTRICT" AS DISTRICT_DISTRICT
     DISTRICT."DURATION" AS DISTRICT_DURATION
FROM
     "dbo"."DISTRICT" DISTRICT
where DISTRICT."DKEY" = $P{parameter1}

在iReport中,您可以创建不同月份的静态列表(组合框),您只能提示插入参数

用户需要手动输入3,6个ecc

<parameter name="parameter1" class="java.lang.Integer" isForPrompting="true">
    <defaultValueExpression><![CDATA[3]]></defaultValueExpression>
</parameter>

iReport的开发目的不是供您的客户使用,而是供您在开发报告时使用

如果您不希望使用,可以开发自己的应用程序供用户选择数据ecc。下面是一个应用程序示例,要求选择月份并生成报告预览(需要修复连接设置并为jrxml文件提供正确路径):

import java.awt.*;
导入java.awt.event.*;
导入java.sql.Connection;
导入java.util.*;
导入javax.swing.*;
导入net.sf.jasperreports.engine.*;
导入net.sf.jasperreports.engine.design.JasperDesign;
导入net.sf.jasperreports.engine.xml.JRXmlLoader;
导入net.sf.jasperreports.view.JRViewer;
公共类JasperReportInterface扩展了JFrame{
私有静态最终长serialVersionUID=5430239481089683268L;
私人JComboBox selectMonts;
公共JasperReportInterface(){
超级(“Jasper报告接口”);
jbInit();
}
私有void jbInit(){
this.getContentPane().setLayout(新的GridBagLayout());
选择monts=newjcombobox();
选择Monts.addItem(新MonthItem(3));
选择Monts.addItem(新MonthItem(6));
this.getContentPane().add(新建JLabel(“选择月份”)、新建GridBagConstraints(0、0、1、1、0.0、0.0、GridBagConstraints.WEST、GridBagConstraints.NONE、新建插图(2、2、2、,
2), 0, 0));
this.getContentPane().add(选择Monts,new GridBagConstraints(1,0,1,1,1.0,0.0,GridBagConstraints.WEST,GridBagConstraints.HORIZONTAL,new Insets(2,2,2,
2), 0, 0));
JButton btnReport=新JButton(“生成报告”);
addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
b报告已执行的行动(e);
}
});
this.getContentPane().add(btnReport,new GridBagConstraints(0,1,2,1,1.0,1.0,GridBagConstraints.WEST,GridBagConstraints.BOTH,new Insets(2,2,2,
2), 0, 0));
}
受保护的无效BTN报告\u已执行的操作(操作事件e){
字符串jasperFilePath=“jasper/myJasperFile.jrxml”;
映射参数=新的HashMap();
Object v=selectMonts.getSelectedItem();
if(v MonthItem实例){
parameters.put(“parameter1”,((MonthItem)v.getMonth());
}
Connection conn=null;//将连接传递到数据库或数据源
茉莉花报告;
试一试{
JasperDesign JasperDesign=JRXmlLoader.load(jasperFilePath);
JasperReport-JasperReport=JasperCompileManager.compileReport(jasperDesign);
report=JasperFillManager.fillReport(jasperReport,parameters,conn);
}捕获(JRE1异常){
e1.printStackTrace();
showMessageDialog(这是“创建报告时出错:”+e1.getMessage());
返回;
}
JRViewer jrv=新的JRViewer(报告);
JDialog查看器=新的JDialog(此);
viewer.setTitle(“打印预览”);
viewer.getContentPane().add(jrv);
pack();
viewer.setSize(新尺寸(840600));
viewer.setLocationRelativeTo(空);
viewer.setVisible(true);
}
蒙提坦类{
私人整数月;
受保护的月份(整数月){
本月=月;
}
公共字符串toString(){
返回月份+“月份”;
}
公共整数getMonth(){
返回月份;
}
}
公共静态void main(字符串[]args){
JasperReportInterface ri=新的JasperReportInterface();
ri.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ri.设置大小(400100);
ri.setLocationRelativeTo(空);
ri.setVisible(真);
}
}

当然,您也可以开发类似的web应用程序。

亲爱的,我最终使用extjs 4.2构建了一个表单,并根据用户的参数在网格中显示所选记录。但是我如何才能将网格连接到jasper ireport?@mikeb Your没有真正将其连接到ireport(ireport只是一个开发报告的工具,即jrxml)。。。我需要查看您的网格以准确了解您需要什么,但通常过程是创建一个JRDatasource(基于您的参数),调用jrxml(报告)并导出为您喜欢的格式(pdf、excel、html ecc)。在报告中,如果列是动态的,则应该考虑使用交叉项。如果您通过另一个关于数据源示例的问题,即所需布局jrxml ecc,我可以尝试帮助您。
import java.awt.*;
import java.awt.event.*;
import java.sql.Connection;
import java.util.*;
import javax.swing.*;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import net.sf.jasperreports.view.JRViewer;

public class JasperReportInterface extends JFrame {

  private static final long serialVersionUID = 5430239481089683268L;
  private JComboBox<MonthItem> selectMonts;

  public JasperReportInterface() {
    super("Jasper Report Interface");
    jbInit();
  }

  private void jbInit() {
    this.getContentPane().setLayout(new GridBagLayout());

    selectMonts = new JComboBox<MonthItem>();
    selectMonts.addItem(new MonthItem(3));
    selectMonts.addItem(new MonthItem(6));

    this.getContentPane().add(new JLabel("Select month:"), new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(2, 2, 2,
            2), 0, 0));
    this.getContentPane().add(selectMonts, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(2, 2, 2,
            2), 0, 0));

    JButton btnReport = new JButton("Generate report");
    btnReport.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            btnReport_actionPerformed(e);
        }
    });

    this.getContentPane().add(btnReport,new GridBagConstraints(0, 1, 2, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(2, 2, 2,
            2), 0, 0));
  }

  protected void btnReport_actionPerformed(ActionEvent e) {

    String jasperFilePath = "jasper/myJasperFile.jrxml";

    Map<String, Object> parameters = new HashMap<String, Object>();
    Object v = selectMonts.getSelectedItem();
    if (v instanceof MonthItem) {
        parameters.put("parameter1", ((MonthItem) v).getMonth());
    }

    Connection conn = null; // Pass the connection to database or datasource

    JasperPrint report;
    try {
        JasperDesign jasperDesign = JRXmlLoader.load(jasperFilePath);
        JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
        report = JasperFillManager.fillReport(jasperReport, parameters, conn);
    } catch (JRException e1) {
        e1.printStackTrace();
        JOptionPane.showMessageDialog(this, "Error creating report: " + e1.getMessage());
        return;
    }

    JRViewer jrv = new JRViewer(report);
    JDialog viewer = new JDialog(this);
    viewer.setTitle("Print preview");
    viewer.getContentPane().add(jrv);
    viewer.pack();
    viewer.setSize(new Dimension(840, 600));
    viewer.setLocationRelativeTo(null);
    viewer.setVisible(true);
  }

  class MonthItem {
    private int month;
    protected MonthItem(int month) {
        this.month = month;
    }
    public String toString() {
        return month + " months";
    }
    public int getMonth() {
        return month;
    }
  }

  public static void main(String[] args) {
    JasperReportInterface ri = new JasperReportInterface();
    ri.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    ri.setSize(400,100);
    ri.setLocationRelativeTo(null);
    ri.setVisible(true);
  }
}