虽然是一张简单的报表,但是,真正做起来还是遇到很多问题,可以写下来的很多东西。
一、后台数据获得
1、后台数据的获得,因为SQLServer数据库本身数据量很大,因此在获得数据的时候SQL语句的编写十分重要。要统计满足某个条件的记录条数,当然知道是 select count(*) group by 的形式来获得,但是,如果为空的记录就不会显示出来。起初我使用的是“ group by 所在设区市 ”的形式,然后再取并集,这种比较笨的方法实现,这种显然效率比较低。第二天在网上搜索了一下,使用“ group by all 所在设区市 ”的形式,这种方法可以把为空的市区也呈现出来,符合我们的要求。
2、主要用了两个bean,一个ConnDB.java(连接数据库),一个 ShuliangManager.java(静态方法,返回所取数据列表)。
二前台页面的展现:
1、周日在家,我的想法是单独用table 来实现,但是遇到了很多问题,而且非常难以实现这样的方式。周一,咨询了一位同事,用dreamweaver来实现。用这个确实比较简单。需要借鉴的是,如果某个单元格是通过合并多行或者多列实现的,是通过 <td width="252" rowspan="2" colspan="2"><div align="center">地区类型</div></td>,rowspan colspan这种方式来实现的。后续在数据库取得的数据,根据每行,列头的width的大小来设置后面所取数据的宽度。
2、由于在dreamweaver下面拷贝过来的代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
因此如果:
<input type="hidden" name="year" value="<%=stryear %>">
就会提示错误“tag input must be empty”,提示这样的错误
解决方法:
<input type="hidden" name="year" value="<%=stryear %>"/>
3、增加导出excel功能:方法如下:
在原有</table>下面增加:
<input type="hidden" name="year" value="<%=stryear %>"/> 用于传递 "year"参数
<input type="hidden" name="month" value="<%=strmonth %>"/> 用于传递 "month"参数
<div align="center"><input type="button" align="middle" value="导出到Excel" onclick="check()"/>
</div> 增加此点击按钮。
check函数实现如下:
function check(){
var flag;
flag = 1;
document.form1.action="showview.jsp?flag="+flag;
document.form1.submit();
}
通过flag的设置从而,实现跳转。
在此jsp<head>之前对此进行了判断,如果flag标志为1,则实现导出到Excel中实现的功能。
if(request.getParameter("flag").equals("1"))
{
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition","attachment; filename=MyExcel.xls");
}