有的时候,我们不仅仅需要漂亮的统计图来显示统计结果,还需要在统计图下方一个表格可以更加直观的展现各类数据。既然统计图都显示出来了,那我们可以根据统计图的各元素生成表格了。

  首先,先显示统计图。

  Html----通过一个查询按钮,根据查询条件,查询满足条件的数据,显示到统计图中。

<a onclick="Query();" >查询</a>
<center>
   <div id="chartPro" style="width: 80%"></div>
   <div id="container" style="width:700px;hight:70px"></div>
</center>

  JS------生成统计图,生成表格

 1      function Query(){
 2          /* 获取查询条件------start------ */
 3          var tradTp=document.getElementById( "tradTp").value;//所属行业
 4          var county=document.getElementById( "county").value;//所属区县
 5          var replDtS=document.getElementById("replDtS").value;//批复时间,开始
 6          var replDtE=document.getElementById("replDtE").value;//批复时间,结束
 7          var radios = document.getElementsByName('type');
 8          var countyRad=radios[0];
 9          var trapTpRad=radios[1];
10          var chartTp;
11          if(countyRad.checked==true){
12              chartTp=countyRad.value;
13          }
14          if(trapTpRad.checked==true){
15              chartTp=trapTpRad.value;
16          }
17          /* 获取查询条件------end------ */
18           $.ajax({
19              type:"post",
20              dataType:"json",
21              data: {"project.tradTp":tradTp,"project.county":county,"project.replDtS":replDtS,"project.replDtE":replDtE,"project.chartTp":chartTp},
22              async:false,
23             url : "<%=basePath%>wiassess/projectMgr/projectMgrAction!getProjectChart.action",
24             success : function(result) {
25                 var jsonData = result;
26                 var xdata = jsonData.xdata;  //获取横坐标数组
27                 var data = jsonData.data;    //获取显示数据
28                 var titleTm = jsonData.title; //获取标题
29                 var chart = new Highcharts.Chart(  //生成统计图表
30                         {
31                             chart : {
32                                 renderTo : 'chartPro',  //指向要生成图表的div的Id
33                                 type : 'column',        //柱形图类型
34                                 margin : 75,            //以下是样式设置
35                                 options3d : {
36                                     enabled : true,
37                                     alpha : 0,
38                                     beta : 0,
39                                     depth : 50,
40                                     viewDistance : 25
41                                 }
42                             },
43 
44                             title : {
45                                 text : titleTm    //显示标题
46                             },
47                             credits : {//不显示highchart超链接
48                                 enabled : false
49                             },
50                             plotOptions : {
51                                 column : {
52                                     depth : 10,
53                                     value : 0,
54                                     width : 1
55                                 }
56                             
57                             },
58                             yAxis : {
59                                 title : {
60                                     text : '单位:立方米'
61                                 }
62                             },
63                             xAxis : {
64                                 categories : xdata
65                             },
66                             tooltip : {  //鼠标移至柱形图上提示数据格式
67                                 shared : true,
68                                 useHTML : true,
69                                 headerFormat : '<small>{point.key}</small><table>',
70                                 pointFormat : '<tr><td style="color: {series.color}">{series.name}: </td>'
71                                         + '<td style="text-align: right"><b>{point.y} 立方米</b></td></tr>',
72                                 footerFormat : '</table>',
73                                 valueDecimals : 2
74                             },
75                             series: [{
76                                 name:'取水总量',
77                                 data: data
78                             }]
79                         });
80             },
81             error: function(){
82                 alert('获取失败!');
83             }
84         });
85          //生成表格
86         HighchartsToTable($("#chartPro"),$("#container"),("(单位:立方米)"));
87     }

   下面是这篇博客的主题了,生成表格的JS文件chartToTable.js

  

 1     /**
 2      * 将Highcharts图表数据生成Table表格
 3      * @param div  统计图表的div的Id
 4      * @param table  要生成表格的div的Id
 5      * @param unitName  各个统计图的单位信息
 6      */
 7     function HighchartsToTable(div,table,unitName) {
 8         //获取图表对象
 9         var chart = div.highcharts();
10         if (chart != null) {
11             //获取X轴集合对象
12             var categories = chart.xAxis[0].categories;
13             //获取series集合
14             var seriesList = chart.series;
15             //获取标题
16             var title = chart.title.textStr;
17             //先清空原表格内容
18             table.html("");
19             //获取表格div对象
20             var tableObj = table;
21             //定义行元素<tr></tr>
22             var tr;
23             //定义表格体<table></table>
24             var tab;
25             tab = $("<table cellspacing='1' cellpadding='1'  width='100%' style=\"border:solid #add9c0; border-width:1px 0px 0px 1px;text-align:center;margin: 2px;\" ></table>")
26             tab.appendTo(tableObj);
27             //第一行,放置标题
28             tr = $("<tr></tr>");
29             tr.appendTo(tab);
30             var td = $("<td colspan='" + categories.length + 1 + "' style=\"border:solid #add9c0; border-width:0px 1px 1px 0px; padding:5px 0px;\" >" + title +"<b style=\"font-size:14px;font-family:'Times New Roman','Microsoft YaHei';float:right\">"+unitName+"</b>"+ "</td>");
31             td.appendTo(tr);
32             //下一行,放置数据
33             tr = $("<tr ></tr>")
34             tr.appendTo(tab);
35             td = $("<td style=\"border:solid #add9c0; border-width:0px 1px 1px 0px; padding:5px 0px;\"></td>");
36             td.appendTo(tr);
37             for ( var i = 0; i < categories.length; i++) {
38                 td = $("<td style=\"border:solid #add9c0; border-width:0px 1px 1px 0px; padding:5px 0px;\">" + categories[i] + "</td>");
39                 td.appendTo(tr);
40             }
41             //分批插入数据
42             for ( var i = 0; i < seriesList.length; i++) {
43                 tr = $("<tr></tr>");
44                 tr.appendTo(tab);
45                 //先加入一个序列名称
46                 td = $("<td style=\"border:solid #add9c0; border-width:0px 1px 1px 0px; padding:5px 0px;\">" + seriesList[i].name + "</td>");
47                 td.appendTo(tr);
48                 //遍历数据点追加数据值
49                 for ( var j = 0; j < seriesList[i].data.length; j++) {
50                     td = $("<td style=\"border:solid #add9c0; border-width:0px 1px 1px 0px; padding:5px 0px;align:center\">" + seriesList[i].data[j].y + "</td>");
51                     td.appendTo(tr);
52                 }
53             }
54         } else {
55             alert("获取图表对象失败!");
56             }
57     }
58     

 

  统计图生成表格的大概思路就是,获取统计图上的数据,然后生成一个表格,在表格里遍历获取到的数据。生成的表格的样式可以单独放在style文件里,我这里还没有整理,所以全写在动态生的html里,了解了大概思路,就可以根据具体情况生成你想要的表格了。具体样式如下。(部分有关系统业务的地方打了马赛克,大概看个样子吧,嘻嘻)

  

posted on 2015-01-26 09:38  贞心真义  阅读(9202)  评论(2编辑  收藏  举报