Loading

ASP.NET MVC+HighCharts开发统计图表

HighCharts是开源的Web图表js组件,与D3.js一样,经常用于数据可视化。HighCharts图表类型丰富,功能非常强大,是很好的数据可视化解决方案,其官方网站为:http://www.hcharts.cn/,感兴趣的读者可以自行去下载HighCharts并按照给出的Example尝试着开发,基本上按照示例中的例子,把数据部分替换成自己想要展示的数据就可以了,非常容易上手。本篇博客将结合ASP.NET MVC和HighCharts开发统计图表功能,为简单起见,这里只演示三个最基本、最常用的图表类型(柱状图、饼图)。

一、横向柱状图

前端cshtml代码:

@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>退休单位统计</title>
    <script src='@Url.Content("~/Scripts/jquery-1.7.1.js")'></script>
    <script src='@Url.Content("~/Scripts/hightcharts/highcharts.js")'></script>
    <script src='@Url.Content("~/Scripts/hightcharts/exporting.js")'></script>
    <script src='@Url.Content("~/Scripts/hightcharts/highcharts-zh_CN.js")'></script>
</head>
<body>
    <div id="container" style="min-width: 400px; height: 400px">
    </div>
    <script type="text/javascript">

        $(function () {
            $.ajax({
                url: '@Url.Action("GetTXDW", "TJTB")',
                type: 'get',
                success: function (result) {
                    var name = result.split(';')[0];
                    var data = result.split(';')[1];
                    var nname = eval('(' + name + ')');
                    var ddata = eval('(' + data + ')');
                    $('#container').highcharts({
                        chart: {
                            type: 'bar'
                        },
                        title: {
                            text: '退休人数最多的十个单位'
                        },
                        subtitle: {
                            text: ''
                        },
                        xAxis: {
                            categories: nname,
                            //                            [
                            //                                '自由职业',
                            //                                'xxx有限公司',
                            //                                'xxx工程总公司',
                            //                                'xxx有限公司',
                            //                                'xxx总公司',
                            //                                'xxx有限公司',
                            //                                'xxx有限公司',
                            //                                'xxx有限公司',
                            //                                'xxx厂',
                            //                                'xxx有限责任公司'
                            //                            ],
                            title: {
                                text: null
                            }
                        },
                        yAxis: {
                            min: 0,
                            title: {
                                text: '人数',
                                align: 'high'
                            },
                            labels: {
                                overflow: 'justify'
                            }
                        },
                        tooltip: {
                            valueSuffix: ''
                        },
                        plotOptions: {
                            bar: {
                                dataLabels: {
                                    enabled: true,
                                    allowOverlap: true
                                }
                            }
                        },
                        legend: {
                            layout: 'vertical',
                            align: 'right',
                            verticalAlign: 'top',
                            x: -40,
                            y: 100,
                            floating: true,
                            borderWidth: 1,
                            backgroundColor: ((Highcharts.theme && Highcharts.theme.legendBackgroundColor) || '#FFFFFF'),
                            shadow: true
                        },
                        credits: {
                            enabled: false
                        },
                        series:
                        [{
                            name: '人数',
                            data: ddata
                            //data: [23926, 2328, 1828, 1816, 1485, 1464, 1408, 1164, 1124, 1124]
                        }
                        ]
                    });
                }
            });
        })
    </script>
</body>
</html>

控制器cs代码:

/// <summary>
/// 退休单位统计
/// </summary>
/// <returns></returns>
[HttpGet]
public string GetTXDW()
{
    string result1 = string.Empty;
    string result2 = string.Empty;
    string sql = @"with a as(select rownum rn,t.* from(
select gzdw,count(gzdw) xl from T_RYXX 
group by gzdw
order by xl desc) t)
select gzdw,xl from a where a.rn>=1 and a.rn<=10";

    result1 += "[";
    result2 += "[";
    DataSet ds = OracleHelper.Query(sql);
    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
    {
        result1 += "'" + ds.Tables[0].Rows[i]["GZDW"].ToString() + "'";
        result2 += ds.Tables[0].Rows[i]["XL"].ToString();
        if (i != ds.Tables[0].Rows.Count - 1)
        {
            result1 += ",";
            result2 += ",";
        }
    }
    result1 += "]";
    result2 += "]";
    return result1 + ";" + result2;
}

 

二、饼图

前端cshtml代码:

@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>性别统计</title>
    <script src='@Url.Content("~/Scripts/jquery-1.7.1.js")' type="text/javascript"></script>
    <script src='@Url.Content("~/Scripts/hightcharts/highcharts.js")' type="text/javascript"></script>
    <script src='@Url.Content("~/Scripts/hightcharts/highcharts-3d.js")' type="text/javascript"></script>
    <script src='@Url.Content("~/Scripts/hightcharts/exporting.js")' type="text/javascript"></script>
    <script src='@Url.Content("~/Scripts/hightcharts/highcharts-zh_CN.js")' type="text/javascript"></script>
</head>
<body>
    <div id="container" style="min-width: 400px; height: 400px">
    </div>
    <script type="text/javascript">
        $(function () {
            $.ajax({
                url: '@Url.Action("GetXBTJ", "TJTB")',
                type: 'get',
                success: function (result) {
                    var data = eval('(' + result + ')');
                    $('#container').highcharts({
                        chart: {
                            plotBackgroundColor: null,
                            plotBorderWidth: null,
                            plotShadow: false
                        },
                        title: {
                            text: '退休人员性别比例'
                        },
                        tooltip: {
                            headerFormat: '{series.name}<br>',
                            pointFormat: '{point.name}: <b>{point.percentage:.1f}%</b>'
                        },
                        plotOptions: {
                            pie: {
                                allowPointSelect: true,
                                cursor: 'pointer',
                                dataLabels: {
                                    enabled: true,
                                    format: '<b>{point.name}</b>: {point.percentage:.1f} %',
                                    style: {
                                        color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black'
                                    }
                                }
                            }
                        },
                        series: [{
                            type: 'pie',
                            name: '退休人员性别比例',
                            data: data
                        }]
                    });
                }
            });
        });
    </script>
</body>
</html>

控制器cs代码:

/// <summary>
/// 性别统计
/// </summary>
/// <returns></returns>
[HttpGet]
public string GetXBTJ()
{
    string result = string.Empty;
    string sql = @"with a as(select substr((case when length(sfzhm)=15 then idcard15to18(sfzhm)
else sfzhm end),17,1) sfzhm
from T_RYXX 
where regexp_replace(sfzhm,'^[-\+]?\d+(\.\d+)?$','') is null
order by to_number(dah))

select t.xb,count(t.xb) xl from (
select (case when mod(to_number(sfzhm),2)=0 then '女' else '男' end) xb from a) t
group by t.xb";
    DataSet ds = OracleHelper.Query(sql);
    result += "[";
    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
    {
        result += "[";
        result += "'" + ds.Tables[0].Rows[i]["XB"].ToString() + "'";
        result += ",";
        result += ds.Tables[0].Rows[i]["XL"].ToString();
        result += "]";
        if (i != ds.Tables[0].Rows.Count - 1)
        {
            result += ",";
        }
    }
    result += "]";
    return result;
}

 

三、纵向柱状图

前端cshtml代码:

@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>每日进出库统计</title>
    <script src='@Url.Content("~/Scripts/jquery-1.7.1.js")'></script>
    <script src='@Url.Content("~/Scripts/hightcharts/highcharts.js")'></script>
    <script src='@Url.Content("~/Scripts/hightcharts/highcharts-3d.js")'></script>
    <script src='@Url.Content("~/Scripts/hightcharts/exporting.js")'></script>
    <script src='@Url.Content("~/Scripts/hightcharts/highcharts-zh_CN.js")'></script>
</head>
<body>
    <div id="container" style="min-width: 400px; height: 400px">
    </div>
    <script type="text/javascript">
        $(function () {
            $.ajax({
                url: '@Url.Action("GETJCK", "TJTB")',
                type: 'get',
                success: function (result) {
                    var date = result.split(';')[0];
                    var ink = result.split(';')[1];
                    var outk = result.split(';')[2];
                    var data1 = eval('(' + date + ')');
                    var data2 = eval('(' + ink + ')');
                    var data3 = eval('(' + outk + ')');

                    $('#container').highcharts({
                        chart: {
                            type: 'column'
                        },
                        title: {
                            text: '每日档案进出库情况(最近10天)'
                        },
                        subtitle: {
                            text: ''
                        },
                        xAxis: {
                            categories: data1,
                            crosshair: true
                        },
                        yAxis: {
                            min: 0,
                            title: {
                                text: '档案进出库'
                            }
                        },
                        tooltip: {
                            headerFormat: '<span style="font-size:10px">{point.key}</span><table>',
                            pointFormat: '<tr><td style="color:{series.color};padding:0">{series.name}: </td>' +
                    '<td style="padding:0"><b>{point.y:.0f}</b></td></tr>',
                            footerFormat: '</table>',
                            shared: true,
                            useHTML: true
                        },
                        plotOptions: {
                            column: {
                                pointPadding: 0.2,
                                borderWidth: 0
                            }
                        },
                        series: [{
                            name: '进库',
                            data: data3
                        }, {
                            name: '出库',
                            data: data2
                        }]
                    });
                }
            });
        });
    </script>
</body>
</html>

控制器cs代码:

/// <summary>
/// 进出库统计
/// </summary>
/// <returns></returns>
[HttpGet]
public string GETJCK()
{
    string result1 = string.Empty;
    string result2 = string.Empty;
    string result3 = string.Empty;
    string sql = @"with a as(select to_char(czsj,'yyyy-mm-dd') jysj,count(*) jyxl 
from t_dajy 
where to_char(czsj,'yyyy-mm-dd')>to_char(sysdate-10,'yyyy-mm-dd')
group by to_char(czsj,'yyyy-mm-dd')),

b as(select to_char(ghsj,'yyyy-mm-dd') ghsj,count(*) ghxl
from t_dagh 
where to_char(ghsj,'yyyy-mm-dd')>to_char(sysdate-10,'yyyy-mm-dd')
group by to_char(ghsj,'yyyy-mm-dd')),

c as(select 
to_char(to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd') -rownum+1,'yyyy-mm-dd') as d from dual
connect by rownum <=to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd')
-to_date(to_char(sysdate-10,'yyyy-mm-dd'),'yyyy-mm-dd'))

select c.d,(case when a.jyxl is null then 0 else a.jyxl end) jyxl,
(case when b.ghxl is null then 0 else b.ghxl end) ghxl from c 
left join a on a.jysj = c.d
left join b on b.ghsj = c.d
order by d desc";
    result1 += "[";
    result2 += "[";
    result3 += "[";
    DataSet ds = OracleHelper.Query(sql);
    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
    {
        result1 += "'" + ds.Tables[0].Rows[i]["D"].ToString() + "'";
        result2 += ds.Tables[0].Rows[i]["JYXL"].ToString();
        result3 += ds.Tables[0].Rows[i]["GHXL"].ToString();

        if (i != ds.Tables[0].Rows.Count - 1)
        {
            result1 += ",";
            result2 += ",";
            result3 += ",";
        }
    }
    result1 += "]";
    result2 += "]";
    result3 += "]";
    return result1 + ";" + result2 + ";" + result3;
}

 

posted @ 2018-01-09 14:04  guwei4037  阅读(3624)  评论(5编辑  收藏  举报