zoukankan      html  css  js  c++  java
  • highcharts与ajax的应用

     前言

    公司近日有个需求,报表的数据以图表的形式展现出来。找了很多相关的资料,最后决定用highcharts图表。

    Highcharts是一个制作图表的纯Javascript类库,主要特性如下:

    • 兼容性:兼容当今所有的浏览器,包括iPhone、IE和火狐等等;

    • 对个人用户完全免费;

    • 纯JS,无BS;

    • 支持大部分的图表类型:直线图,曲线图、区域图、区域曲线图、柱状图、饼状图、散布图;

    • 跨语言:不管是PHP、Asp.net还是Java都可以使用,它只需要三个文件:一个是Highcharts的核心文件highcharts.js,还有a canvas emulator for IE和Jquery类库或者MooTools类库;

    • 提示功能:鼠标移动到图表的某一点上有提示信息;

    • 放大功能:选中图表部分放大,近距离观察图表;

    • 易用性:无需要特殊的开发技能,只需要设置一下选项就可以制作适合自己的图表;

    • 时间轴:可以精确到毫秒;

    二 废话不多说,直接上干货

       1.引入图表所需要的js文件

    <script src="~/Scripts/highcharts.js"></script>
    <script src="/Scripts/jquery-1.10.2.min.js"></script>
    

     2.前端cshtml文件

    <div id="container" style="100%;padding-top:50px;"></div>
    <script type="text/javascript">
        $(function () {
            var xtext = [];
            $.ajax({
                type: "Post",
                url: "@(Url.Action("HighchartsToJson"))",
                success: function (result) {
                    var json = eval("(" + result + ")");
                    for (var key in json.list) {
                        json.list[key].y = json.list[key].Age;
                        xtext.push(json.list[key].Name);
                    }
                    chart.series[0].setData(json.list);
    
                    for (var key in json.list) {
                        json.list[key].y = json.list[key].Score;
                        xtext.push(json.list[key].Name);
                    }
                    chart.series[1].setData(json.list);
    
                    for (var key in json.list) {
                        json.list[key].y = json.list[key].OrderCount;
                        xtext.push(json.list[key].Name);
                    }
                    chart.series[2].setData(json.list);
    
    
                },
                error: function (e) {
                }
            });
    
            var chart = new Highcharts.Chart({
                chart: {
                    renderTo: 'container',
                    type: 'spline'//选择不同的图表,只需更改具体的值就可以了。详情可以参考:https://www.runoob.com/highcharts/highcharts-setting-detail.html
                },
                title: {
                    text: ''
                },
                xAxis: {
                    categories: xtext
                },
                yAxis: {
                    min:0,
                    title: {
                        text: '数值'
                    },
                },
                series: [{
                    name: "年龄"
                }, {
                    name: "分数"
                }, {
                    name: "数量"
                }
                ]
            });
        });
    </script>
    

      3.后台代码

       3.1 list转换成datatable

            /// <summary>
            /// list转换成datatable
            /// </summary>
            /// <param name="list"></param>
            /// <returns></returns>
            public static DataTable ListToDataTable(IList list)
            {
                DataTable result = new DataTable();
                if (list.Count > 0)
                {
                    PropertyInfo[] propertys = list[0].GetType().GetProperties();
                    foreach (PropertyInfo pi in propertys)
                    {
                        //获取类型
                        Type colType = pi.PropertyType;
                        //当类型为Nullable<>时
                        if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
                        {
                            colType = colType.GetGenericArguments()[0];
                        }
                        result.Columns.Add(pi.Name, colType);
                    }
                    for (int i = 0; i < list.Count; i++)
                    {
                        ArrayList tempList = new ArrayList();
                        foreach (PropertyInfo pi in propertys)
                        {
                            object obj = pi.GetValue(list[i], null);
                            tempList.Add(obj);
                        }
                        object[] array = tempList.ToArray();
                        result.LoadDataRow(array, true);
                    }
                }
                return result;
            }        
    

      3.2 判断数字是否为纯数字

             /// <summary>
            /// 判断数字是否为纯数字
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
            private bool IsNumber(string str)
            {
                if (str == null || str.Length == 0)
                    return false;
                ASCIIEncoding ascii = new ASCIIEncoding();
                byte[] bytestr = ascii.GetBytes(str);
    
                foreach (byte c in bytestr)
                {
                    if (c < 48 || c > 57)
                    {
                        return false;
                    }
                }
                return true;
            }
    

      3.3  读取数据

      [HttpPost]
            public string HighchartsToJson()
            {
                List<TableHigh> lineChartList = new List<TableHigh>();
                lineChartList.Add(new TableHigh() { Name = "2020-05-01", Age = 20, Score = 120, OrderCount = 100 });
                lineChartList.Add(new TableHigh() { Name = "2020-05-02", Age = 18, Score = 100, OrderCount = 80 });
                lineChartList.Add(new TableHigh() { Name = "2020-05-03", Age = 17, Score = 110, OrderCount = 70 });
                lineChartList.Add(new TableHigh() { Name = "2020-05-04", Age = 16, Score = 120, OrderCount = 20 });
                lineChartList.Add(new TableHigh() { Name = "2020-05-05", Age = 22, Score = 120, OrderCount = 33 });
                lineChartList.Add(new TableHigh() { Name = "2020-05-06", Age = 24, Score = 100, OrderCount = 44 });
                lineChartList.Add(new TableHigh() { Name = "2020-05-07", Age = 22, Score = 110, OrderCount = 20 });
                lineChartList.Add(new TableHigh() { Name = "2020-05-08", Age = 28, Score = 130, OrderCount = 70 });
                lineChartList.Add(new TableHigh() { Name = "2020-05-09", Age = 22, Score = 120, OrderCount = 80 });
                lineChartList.Add(new TableHigh() { Name = "2020-05-10", Age = 20, Score = 100, OrderCount = 60 });
                lineChartList.Add(new TableHigh() { Name = "2020-05-11", Age = 27, Score = 110, OrderCount = 90 });
                lineChartList.Add(new TableHigh() { Name = "2020-05-12", Age = 32, Score = 130, OrderCount = 60 });
                lineChartList.Add(new TableHigh() { Name = "2020-05-13", Age = 25, Score = 120, OrderCount = 10 });
                lineChartList.Add(new TableHigh() { Name = "2020-05-14", Age = 22, Score = 100, OrderCount = 100 });
                lineChartList.Add(new TableHigh() { Name = "2020-05-15", Age = 22, Score = 110, OrderCount = 130 });
                lineChartList.Add(new TableHigh() { Name = "2020-05-16", Age = 27, Score = 130, OrderCount = 120 });
                lineChartList.Add(new TableHigh() { Name = "2020-05-17", Age = 28, Score = 120, OrderCount = 170 });
                lineChartList.Add(new TableHigh() { Name = "2020-05-18", Age = 25, Score = 100, OrderCount = 160 });
                lineChartList.Add(new TableHigh() { Name = "2020-05-19", Age = 29, Score = 110, OrderCount = 170 });
                lineChartList.Add(new TableHigh() { Name = "2020-05-20", Age = 31, Score = 130, OrderCount = 22 });
                lineChartList.Add(new TableHigh() { Name = "2020-05-21", Age = 22, Score = 120, OrderCount = 33 });
                lineChartList.Add(new TableHigh() { Name = "2020-05-22", Age = 25, Score = 100, OrderCount = 44 });
                var dt = ListToDataTable(lineChartList);//这里用的是测试数据,可以从数据库读取list对象集合
                StringBuilder jsonBuilder = new StringBuilder();
                jsonBuilder.Append("{"");
                jsonBuilder.Append("list");
                jsonBuilder.Append("":[");
    
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    jsonBuilder.Append("{");
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        jsonBuilder.Append(""");
                        jsonBuilder.Append(dt.Columns[j].ColumnName);
                        jsonBuilder.Append("":");
                        //jsonBuilder.Append("":"");
                        //判断下是否纯数字,highcharts插件不是纯数字的值要加双引号
                        if (IsNumber(dt.Rows[i][j].ToString()))
                        {
                            jsonBuilder.Append(dt.Rows[i][j].ToString());
                        }
                        else
                        {
                            jsonBuilder.Append(""");
                            jsonBuilder.Append(dt.Rows[i][j].ToString());
                            jsonBuilder.Append(""");
                        }
                        jsonBuilder.Append(",");
                        //jsonBuilder.Append("",");
                    }
                    jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
                    jsonBuilder.Append("},");
                }
                jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
                jsonBuilder.Append("]");
                jsonBuilder.Append("}");
                return jsonBuilder.ToString();
            }

    三 图形效果

    四  总结

    在网上找了很多关于Highcharts的资料,有的没有前端完整的代码,有的没有后台的详细代码。都只是侃侃而谈;

    没有一个完整的例子,自己记录一下,有这方面的需求,大家可以借鉴一下,不喜勿喷!

  • 相关阅读:
    个人:我的2011生活看板
    个人管理:公司做的稻盛阿米巴培训笔记
    使用TOGAF来做业务架构 价值驱动产品开发
    30天敏捷结果(21)正面失败,吸取教训,改善结果
    2010年12月blog汇总:敏捷个人
    30天敏捷结果(25):固定时间,灵活范围
    101与金根回顾敏捷个人:(11)执行力
    团队管理:设计团队的一周
    云:构建云计算的核心技术与平台
    读书笔记:千万别学英语
  • 原文地址:https://www.cnblogs.com/aiyining1314/p/13083987.html
Copyright © 2011-2022 走看看