zoukankan      html  css  js  c++  java
  • 关于《报表》的实际运用案例

    问题:看下图,我需要在咸阳前加 【西安】 在西城和商洛之间加【合计】,并且把西城和西县的值累计到西安一栏;然后把除了西安这一栏之外的值都累加到合计一栏?想想怎么做?

    说明:这些数据都是可以从后台读取过来的,在这里暂时不讨论如何实现这样的数据结构。

     经过一番功夫就是写代码啦,我们会看到如下的效果:

     代码稍后会有提点!!

                List<Group> dishiNames = new ArrayList<Group>();
              //Group是一个实体类,字段主要有name,id等		
              dishiNames = loginMonthReport.findCityName(groupId); // dishiNames={"咸阳","宝鸡","渭南市","铜川市","延安","榆林","汉中市","安康市","商洛","西城","西县"}; if(groupId == "2") { Group tempxian = new Group(); tempxian.setId("0828"); tempxian.setName("西安"); dishiNames.add(0, tempxian); // 将西安添加到List的第一个位置变成了dishiNames={"西安","咸阳","宝鸡","渭南市","铜川市","延安","榆林","汉中市","安康市","商洛","西城","西县"}; }
              //添加合计名称 Group tempgroup = new Group(); tempgroup.setId("1994"); tempgroup.setName("合计"); if(dishiNames.size() < 2) { dishiNames.add(tempgroup); //当dishiNames大小小于2时,直接在后面添加就行 } else { dishiNames.add(dishiNames.size() - 2, tempgroup); //当dishiNames大于2,将合计添加到倒数第3个位置. }

     光添加名称还不行,没有添加数据,使出来这样的效果的:

    请看这点代码:

    说说思路:不关联数据库的话,我们只用来测试,那么我们就让所有的数据都为0,把每一行都看作一个list集合,然后整体是一个大的List集合,在用el进行遍历即可。这里我只说说合计和西安两栏数据的实现:

        List<List<Integer>> lsts = new ArrayList<List<Integer>>();   //最大的 List
        lsts=[{0,0,0......},{0,0,0......},{0,0,0......},{0,0,0......},{0,0,0......},{0,0,0......},]; //{0,0,0......}表示每一行数据

            //此处将合计值放入lsts的倒数第二个位置 List<Integer> heji = new ArrayList<Integer>(); /*for(int i = 0; i < 32; i++) { heji.add(0); }*/
              //竖着相加 for(int k = 0; k < 32; k++) { int sum = 0; for(int i = 0; i < lsts.size(); i++) { for(int j = k; j < lsts.get(i).size(); j++) { sum = sum + lsts.get(i).get(j);//实现了每一行list中的数据一一对应的相加,和放在sum中,
                                                                      //比如说:{0,0,0......}
                                                                           {1,0,0......},竖着相加 0+1=1 break;//然后跳出,继续下一列的数据相加 } } heji.add(sum);//把一列的数据和放在heji中 } if(lsts.size() < 3) { lsts.add(lsts.size(), heji); //lsts中没有超过3个的,将合计数据直接加在后面即可。 } else { lsts.add(lsts.size() - 2, heji); //lsts中有超过3个的,将合计数据放在倒数第三个位置。 }

     然后再看看西安一栏数据如何添加:

            //将西城和西县的数据和累计放在西安下
    		List<Integer> xianheji = new ArrayList<Integer>();
    			
    		for(int m = 0; m < 32; m++) {
    			int sum = 0;
    			for(int n = lsts.size() - 1; n >= lsts.size() - 2; --n) { //此处要找到最后两行数据,然后实现累加,跟上面的实现类似。
    				for(int x = m; x < lsts.get(n).size(); x++) {
    					sum = sum + lsts.get(n).get(x);//103
    					break;
    				}
    			}
    			xianheji.add(sum);
    		}
    		lsts.add(0, xianheji);
    			
    

     总计一栏我就不说了,横着加,很简单。最终效果类似下图:

     这个是我在真实项目中做的报表。代码不敢全贴,只能作为参考。感兴趣的试一试,有问题不董或者想交流的,请留言,看到会回复的。

  • 相关阅读:
    python 查询文件存放地址
    类数组对象:arguments
    前端开发工程师从入门到精通学习过程及资源总结(持续更新中)
    CSS3的圆角border-radius属性
    内联元素inline-block空隙问题
    js中typeof用法详细介绍
    正则表达式
    sublime text 3 快捷键大全以及配置编译环境
    c# 泛型类
    c# 中config.exe 引发的一些问题
  • 原文地址:https://www.cnblogs.com/julinhuitianxia/p/7151941.html
Copyright © 2011-2022 走看看