我做了一个masterreport和一个subreport,格式如下
masterreport:
--------------------------------------------------
$F{Name}  $F{Sex}(detail)
(Subreport in this place)
--------------------------------------------------
subreport:
-------------------------------------------------
$P{depart} $P{sum}
-------------------------------------------------
在子报表选项卡中我设connection/datasource expression为use connection 下边是$P{REPORT_CONNECTION}
为兰色,在SUBREPORT(OTHERS)里$p{subreportname}
他是masterreport中的参数,默认值是subreport.jasper的文件路径,在subreport parameters中设了一个conection 参数!在子报表同样有这个参数联系住报表与子报表,子报表中还有两个参数depart和sum,用语在java程序中动态的传递数据!调用他们的java程序如下!
public myReport{
JRResultSetDataSource jrds=null;
JasperPrint jasperPrint=null;
Map reportParams = new HashMap();
ResultSet rs=null;
Connection con = null;
Statement stmt = null;
String sql ;
public void myReportName()
{
subreport();
try
{
sql="select * from masterreport";
JasperDesign jasperDesign = JasperManager.loadXmlDesign("./masterreport.jrxml");
JasperReport jasperReport = JasperManager.compileReport(jasperDesign);
con = DriverManager.getConnectio(ConnectionPoolManager.URL_PREFIX+ConnectionPoolManager.getPoolName(),null,null);stmt = con.createStatement();
rs = stmt.executeQuery(sql);jrds = new JRResultSetDataSource(rs);
jasperPrint = JasperFillManager.fillReport(jasperReport,reportParams,jrds);JasperViewer.viewReport(jasperPrint);}
catch(Exception e)
{
e.getMessage();
}
}
private void subreport()
{
try
{
JasperReport jasperreport = (JasperReport) JRLoader.loadObject("./subreport.jasper");
sql = "select depart,sum from subreport"con = DriverManager.getConnection(ConnectionPoolManager.URL_PREFIX+ConnectionPoolManager.getPoolName(),null,null);
stmt = con.createStatement();
rs = stmt.executeQuery(sql);while(rs.next())
{
reportParams.put("depart",rs.getString("depart"));
reportParams.put("sum",rs.getString("sum"));}
jrds = new JRResultSetDataSource(rs);
}
catch(Exception ee)
{
ee.PrintStackTrace();
}
}

这段程序肯定有问题,但不知道那里错了,还请各位同道一品!!!