运行效果:

之所以选择这个图表插件,是因为它较其他同类插件轻量且中文文档详细完整,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. 使用aespython进行ECB加解密示例

    CBC示例: from aespython import cbc_mode, key_expander, aes_cipher key = 'MluJMEZegVmrnWDaBiG1j7lqpkxNH ...

  2. VirtualBox上Ubuntu 共享文件夹

    1. virtualbox 菜单栏中设备-->共享文件夹,添加一个共享文件夹,比如共享文件夹路径是D:/share,共享文件夹名称是share. 2. 进入虚拟Ubuntu,在命令行终端输入: ...

  3. python 基础干货 01

    赋值的实现 a = 'abc' 1. 在内存中创建了'abc'字符串; 2. 在内存中创建了一个名为 a 的变量, 并把它指向刚才创建的'abc', 也就是a中保存着字符串的地址. b = a, 创建 ...

  4. SSH开源框架考试题

    一.选择题 1.不属于Action接口中定义的字符串常量的是____B___. A.SUCCESS                              B.FAILURE C.ERROR     ...

  5. CoreJava_线程并发(堵塞队列):在某个目录下搜索含有某keyword的文件

    Java多线程编程是很考验一个程序猿水平的. 传统的WEB程序中.由于框架提供了太多的健壮性.并发性.可靠性的支持,所以我们都是将全部的注意力放到了业务实现上.我们不过依照业务逻辑的要求.不停的积累自 ...

  6. 部分 CM11 系统 Android 平板执行植物大战僵尸 2 黑屏的解决的方法

    原文 http://forum.xda-developers.com/showthread.php?t=2755197 部分 CM11 系统的 Android 平板(比如三星 GT-P5110 )执行 ...

  7. socket编程原理

    socket编程原理 1.问题的引入 1) 普通的I/O操作过程: UNIX系统的I/O命令集,是从Maltics和早期系统中的命令演变出来的,其模式为打开一读/写一关闭(open-write-rea ...

  8. Swift 实现图片转字符画的功能

    本文介绍一个IOS APP , 将图片转换成ASCII字符画,使用Swift语言编写. 举个例子,我们使用著名的蕾娜照片作为原图片 经APP转换后形成的字符画,我们打印出来,效果如下: 放大她的脸部可 ...

  9. Hadoop-2.2.0中文文档—— Common - 服务层认证

    目的 此文档描写叙述了怎样为Hadoop配置和管理 Service Level Authorization . 预备条件 确保已经安装Hadoop,配置和设置都正确了. 很多其它细节,请看:* 首次使 ...

  10. 手动安装 mysqldb 与[ pip easy_install]

    mysqldb下载: http://sourceforge.net/projects/mysql-python/ https://sourceforge.net/projects/mysql-pyth ...