运行效果:

之所以选择这个图表插件,是因为它较其他同类插件轻量且中文文档详细完整,Demo丰富,配置使用简单。具体内容请登录中文官网:http://www.hcharts.cn/

项目详细:

项目环境:win10+visual studio 2015 +.net framework 4.5

后台技术:.net mvc + c#

前端技术:Matrixadmin(国外的一款基于bootstrap的后台模板框架)+jquery+highcharts

  代码实现:

  1. 设定系统目前支持的图表类型:EnumChartType.cs(以后可以扩充此文件以支持更多的图表类型)

        public enum EnumChartsType:short
        {
            /// <summary>
            /// 柱形图
            /// </summary>
            column=,
    
            /// <summary>
            /// 折线图
            /// </summary>
            line,
    
            /// <summary>
            /// 条形图
            /// </summary>
            bar,
    
            /// <summary>
            /// 曲线图
            /// </summary>
            spline,
    
            /// <summary>
            /// 区域图
            /// </summary>
            area
        }
  2. 封装用于序列化反序列化Json数据的工具类:CommonJson.cs(Json数据用于highcharts的数据源)
            /// <summary>
            /// 序列化
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="obj"></param>
            /// <returns></returns>
            public static string Serialize(object obj)
            {
                DataContractJsonSerializer jsonFormater = new DataContractJsonSerializer(obj.GetType());
    
                using (MemoryStream ms = new MemoryStream())
                {
                    jsonFormater.WriteObject(ms, obj);
                    ms.Position = ;
                    using (StreamReader sr = new StreamReader(ms))
                    {
                        return sr.ReadToEnd();
                    }
                }
            }
    
            /// <summary>
            /// 反序列化
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="jsonDatas"></param>
            /// <param name="encoding"></param>
            /// <returns></returns>
            public static T Deserialize<T>(string jsonDatas)
                where T : class
            {
                return Deserialize(jsonDatas, typeof(T)) as T;
            }
    
            public static object Deserialize(string jsonDatas, Type t)
            {
                DataContractJsonSerializer jsonFormater = new DataContractJsonSerializer(t);
                byte[] buffer = Encoding.Unicode.GetBytes(jsonDatas);
                using (MemoryStream ms = new MemoryStream(buffer))
                {
                    ms.Position = ;
                    object obj = jsonFormater.ReadObject(ms);
                    return obj;
                }
            }
  3. 封装highcharts的数据源类ChartData.cs
        /// <summary>
        /// HighCharts数据封装类
        /// </summary>
        public class ChartData
        {
            /// <summary>
            /// 图表类型
            /// </summary>
            public int ChartType { set; get; }
    
            /// <summary>
            /// 图表标题
            /// </summary>
            public string ChartTitle { set; get; }
    
            /// <summary>
            /// x轴分组
            /// </summary>
            public string [] XAxisData{set;get;}
    
            /// <summary>
            /// y轴标题
            /// </summary>
            public string YAxisTitle { set; get; }
    
            /// <summary>
            /// y轴数据(key:列名称,value=列数据)
            /// </summary>
            public Dictionary<string, decimal[]> YAxisData { set; get; }
    
            //处理后
            public string xAxisDataStr { set; get; }
            public string yAxisDataStr { set; get; }
    
        }
  4. 创建绘制图表的公共模块,包括:
    Controller:
            /// <summary>
            /// 图表绘制公用
            /// </summary>
            /// <returns></returns>
            public ActionResult Index()
            {
    
                var data = Request.QueryString["data"];
                ChartData chartData = CommonJson.Deserialize<ChartData>(data);
    
                #region 转换x轴分组数据
                //转换x轴分组数据
                chartData.xAxisDataStr = "";
                ; i < chartData.XAxisData.Length; i++)
                {
                    )
                    {
                        chartData.xAxisDataStr += ",";
                    }
    
                    chartData.xAxisDataStr += "'" + chartData.XAxisData[i] + "'";
                }
                #endregion
    
                #region 转换y轴分组数据
                //转换y轴分组数据
                chartData.yAxisDataStr = "";
                ;
                foreach (var item in chartData.YAxisData.Keys)
                {
                    string yData = "";
                    ; i < chartData.YAxisData[item].Length; i++)
                    {
                        )
                        {
                            yData += ",";
                        }
                        yData += chartData.YAxisData[item][i];
                    }
    
                    )
                    {
                        chartData.yAxisDataStr += ",";
                    }
    
                    chartData.yAxisDataStr = "{name:'" + item + "',data:[" + yData + "]}";
    
                    tab++;
                }
                #endregion
                return View(chartData);
            }

    View:(其中,@Html.Raw()的作用是将字符串原文输出,因为从后台传到前台的字符串.net默认会进行转码,当字符串中有单引号等特殊字符时数据会失真)

    @model CollegeManager.Common.Models.ChartData
    @using System.Collections.Generic;
    @using CollegeManager.Common.Utils;
    @{
        ViewBag.Title = "柱形图";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    
    <script type="text/javascript">
        $(function () {
            $('#container').highcharts(
                {
                    chart: { type: '@Html.Raw(((EnumChartsType)Model.ChartType).ToString())' },
                    title: { text: '@Html.Raw(Model.ChartTitle)' },
                    xAxis: {
                        categories: [@Html.Raw(Model.xAxisDataStr)]
                    },
                    yAxis: { title: {text:'@Model.YAxisTitle'}},
                    series: [@Html.Raw(Model.yAxisDataStr)]
                }
                );
    
        });
    </script>
    <div id="container" style="min-width: 600px; height: 350px"></div>
  5. 供js或jquery调用的需要绘图功能的模块中的方法,用以给绘图模块封装数据
            public JsonResult ChartJson()
            {
    
                #region 构造数据
                ChartData chartData = new ChartData();
                chartData.ChartType = (int)EnumChartsType.column;
                chartData.ChartTitle = "柱形图测试用例";
    
                //x轴数据
                chartData.XAxisData = ...... //此处略去
    
                chartData.YAxisTitle += "单位:元";    //y轴标题
    
                chartData.YAxisData = ...... //此处略去
    
                //y轴分组名称
                string yName = "";
    
                //y轴分组数据
                decimal[] yData = new decimal[chartData.XAxisData.Length];
    
                chartData.YAxisData.Add(yName, yData);
                #endregion
    
                return Json(CommonJson.Serialize(chartData));
            }

简易的highcharts公共绘图模块封装--基于.net mvc的更多相关文章

  1. Java 9 揭秘(9. 打破模块封装)

    Tips 做一个终身学习的人. 在此章节中,主要介绍以下内容: 什么是打破模块的封装 如何使用命令行选项将依赖项(添加需要)添加到模块 如何使用--add-exports命令行选项导出模块的未导出包, ...

  2. 【直接拿来用のandroid公共代码模块解析与分享】の Notification和NotificationManager

    本文源代码托管在https://github.com/ASCE1885/asce-common,欢迎fork Android项目做得多了.会发现原来非常多基础的东西都是能够复用,这个系列介绍一些自己项 ...

  3. 系统中异常公共处理模块 in spring boot

    最近在用spring boot 做微服务,所以对于异常信息的 [友好展示]有要求,我设计了两点: 一. 在业务逻辑代码中,异常的抛出 我做了限定,一般只会是三种: 1. OmcException // ...

  4. Magicodes.Pay,打造开箱即用的统一支付库,已提供ABP模块封装

    Magicodes.Pay,打造开箱即用的统一支付库,已提供ABP模块封装 简介 Magicodes.Pay,是心莱科技团队提供的统一支付库,相关库均使用.NET标准库编写,支持.NET Framew ...

  5. react封装基于axios的API请求

    一.最近做的一个后台管理项目,基于antd-pro做的,需要封装基于axios请求,便于开发,直接上代码. import axios from 'axios'; export const Method ...

  6. JavaScript 模块封装

    JavaScript 模块封装 前言介绍 在最早的时候JavaScript这门语言其实是并没有模块这一概念,但是随着时间的推移与技术的发展将一些复用性较强的代码封装成模块变成了必要的趋势. 在这篇文章 ...

  7. python解析xml模块封装代码

    在python中解析xml文件的模块用法,以及对模块封装的方法.原文转自:http://www.jbxue.com/article/16586.html 有如下的xml文件:<?xml vers ...

  8. 如何将自己写的verilog模块封装成IP核

    如何将自己写的verilog模块封装成IP核 (2014-11-21 14:53:29) 转载▼ 标签: 财经 分类: 我的东东 =======================第一篇========= ...

  9. python + selenium 模块封装及参数化

    模块封装 示例代码: baidu.py from time import sleep from selenium import webdriver driver = webdriver.Chrome( ...

随机推荐

  1. Eclipse 下载与安装(2014.12.26——by小赞)

    Eclipse网站首页:http://www.eclipse.org/home/index.php Eclipse下载页网址:http://www.eclipse.org/downloads/ 步骤一 ...

  2. asp.net将本地Excel上传到服务器并把数据导入到数据库

    前台代码: <td class="formLabel"> 批量修改: </td> <td class="formInput"> ...

  3. Linux安装Git

    (1)下载git压缩文件,使用当前的用户yum安装git,先下载再安装,其中有一次需要输入Y sudo yum install git-all 服务器回应,其实除了安装git之外,也会安装其他需要的依 ...

  4. SQL 中having 和where的区别分析

    在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集 在select语句中可以使用groupby子 ...

  5. 大陆用户如何下载Google Play中的apk文件

    利用一些中转网站完成,具体原理可能是以手机虚拟机形式下载,然后提取app,给出下载链接,不过知不知道原理不重要,反正都是被墙. 这里给出测试可用的网站apkpure(20160714) http:// ...

  6. chromium截图实现

    声明:本blog是我自己写的,假设要转载,请注明:come from blog of niba! chromium终于显示是在ContentView上.但通过硬件加速.渲染合成的网页之前是在surfa ...

  7. webbrowser selstart selLength

    附件:http://files.cnblogs.com/xe2011/Webbrowser_SelStart.rar 1 获得webBrowser光标所在的位置 2 设置webBrowser光标的位置 ...

  8. c++使用mysql的api连接相关问题

    记录一下自己使用中的相关问题,方便有相同问题的同学解决. 关于在VS中的各种配置.看这里.只是须要注意一下,我如今用的mysql版本号是5.6的,已经没有[MySQL Server \lib\opt] ...

  9. Android 指定日期时间执行任务的Timer

    放上一个指定详细日期及时间的timer public class MainActivity extends Activity { private Handler handler = new Handl ...

  10. 9张思维导图学习Javascript(转)

    思维导图小tips:思维导图又叫心智图,是表达发射性思维的有效的图形思维工具 ,它简单却又极其有效,是一种革命性的思维工具.思维导图运用图文并重的技巧,把各级主题的关系用相互隶属与相关的层级图表现出来 ...