简易的highcharts公共绘图模块封装--基于.net mvc
运行效果:

之所以选择这个图表插件,是因为它较其他同类插件轻量且中文文档详细完整,Demo丰富,配置使用简单。具体内容请登录中文官网:http://www.hcharts.cn/
项目详细:
项目环境:win10+visual studio 2015 +.net framework 4.5
后台技术:.net mvc + c#
前端技术:Matrixadmin(国外的一款基于bootstrap的后台模板框架)+jquery+highcharts
代码实现:
- 设定系统目前支持的图表类型:EnumChartType.cs(以后可以扩充此文件以支持更多的图表类型)
public enum EnumChartsType:short { /// <summary> /// 柱形图 /// </summary> column=, /// <summary> /// 折线图 /// </summary> line, /// <summary> /// 条形图 /// </summary> bar, /// <summary> /// 曲线图 /// </summary> spline, /// <summary> /// 区域图 /// </summary> area } - 封装用于序列化反序列化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; } } - 封装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; } } - 创建绘制图表的公共模块,包括:
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> - 供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的更多相关文章
- Java 9 揭秘(9. 打破模块封装)
Tips 做一个终身学习的人. 在此章节中,主要介绍以下内容: 什么是打破模块的封装 如何使用命令行选项将依赖项(添加需要)添加到模块 如何使用--add-exports命令行选项导出模块的未导出包, ...
- 【直接拿来用のandroid公共代码模块解析与分享】の Notification和NotificationManager
本文源代码托管在https://github.com/ASCE1885/asce-common,欢迎fork Android项目做得多了.会发现原来非常多基础的东西都是能够复用,这个系列介绍一些自己项 ...
- 系统中异常公共处理模块 in spring boot
最近在用spring boot 做微服务,所以对于异常信息的 [友好展示]有要求,我设计了两点: 一. 在业务逻辑代码中,异常的抛出 我做了限定,一般只会是三种: 1. OmcException // ...
- Magicodes.Pay,打造开箱即用的统一支付库,已提供ABP模块封装
Magicodes.Pay,打造开箱即用的统一支付库,已提供ABP模块封装 简介 Magicodes.Pay,是心莱科技团队提供的统一支付库,相关库均使用.NET标准库编写,支持.NET Framew ...
- react封装基于axios的API请求
一.最近做的一个后台管理项目,基于antd-pro做的,需要封装基于axios请求,便于开发,直接上代码. import axios from 'axios'; export const Method ...
- JavaScript 模块封装
JavaScript 模块封装 前言介绍 在最早的时候JavaScript这门语言其实是并没有模块这一概念,但是随着时间的推移与技术的发展将一些复用性较强的代码封装成模块变成了必要的趋势. 在这篇文章 ...
- python解析xml模块封装代码
在python中解析xml文件的模块用法,以及对模块封装的方法.原文转自:http://www.jbxue.com/article/16586.html 有如下的xml文件:<?xml vers ...
- 如何将自己写的verilog模块封装成IP核
如何将自己写的verilog模块封装成IP核 (2014-11-21 14:53:29) 转载▼ 标签: 财经 分类: 我的东东 =======================第一篇========= ...
- python + selenium 模块封装及参数化
模块封装 示例代码: baidu.py from time import sleep from selenium import webdriver driver = webdriver.Chrome( ...
随机推荐
- Ubuntu 如何使用apt命令安装、升级、卸载软件
apt-get是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索.安装.升级.卸载软件或操作系统. apt-get命令一般需要root权限执行,所以一般跟着su ...
- mysql常用的一些命令,用于查看数据库、表、字段编码
1.查看数据库支持的所有字符集 show character set;或show char set; 2.查看当前状态 里面包括当然的字符集设置 status或者\s ...
- 使用GSoap开发WebService客户端与服务端
Gsoap 编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现, 从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多. 用gsoap开发web service的大致思路 我 ...
- Hibernate学习之表一对多,多对一关系
代码: person类: public class Person { private long id; private String name; private int age; private Da ...
- 【JAVA - SSM】之MyBatis的ParameterType的使用
在MyBatis的Mapper.xml文件中,参数的表示方法有两种:一种是使用 "#{XXX}" 的方式表示的,另一种是使用 "${XXX}" 的方式表示的.今 ...
- PowerShell自定义对象
前面的性能高 使用[pscustomobject][ordered]强制类型转换 [pscustomobject][ordered]@{Name= 'Boe'Number = 1ID = 007} 使 ...
- SVG(可扩展矢量图)系列教程
本系列教程同步至博客www.waylau.com 从新往久排序,持续更新 SVG与JS交互实例之画板 SVG <marker>创建箭头 SVG实例之中国地图 SVG实例之电力开关 SVG ...
- OPENCV中滑动条的使用
//文中存在两种不同的图像的平滑类型.一类是彩色图像,还有一类是灰度图像.经证明,两种均能够 #include<cv.h> #include<highgui.h> #inclu ...
- OGG-01224 Bad file number
今天在看OGG的日志时.发现例如以下OGG-01224 Bad file number错误.查阅资料才知道port不可用,看了一下mgr的參数,发现是设置的DYNAMICPORTLIST 动态port ...
- SQL Server与Oracle对比学习:权限管理(一)
http://blog.csdn.net/weiwenhp/article/details/8093661 我们发现我们现在的生活中到处是涉及到密码,你要记各种各样的密码.比如银行卡,邮件,QQ,微博 ...