Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习、个人网站和非商业用途使用。目前HighCharts支持 的图表类型有曲线图、区域图、柱状图、饼状图、散状点图和综合图表。

HighCharts使用原理如下图所示:

普通开发模式是在前端应用Jquery和HighChartsJS库文件,然后在<head>头中写Js脚本,例如绘制饼图Jquery脚本如下:

绘制饼图Jquery脚本$(function () {$('#container').highcharts({chart: {plotBackgroundColor: null,plotBorderWidth: null,plotShadow: false},title: {text: 'Browser market shares at a specific website, 2010'},tooltip: {pointFormat: '{series.name}: <b>{point.percentage}%</b>',percentageDecimals: 1},plotOptions: {pie: {allowPointSelect: true,cursor: 'pointer',dataLabels: {enabled: true,color: '#000000',connectorColor: '#000000',formatter: function() {return '<b>'+ this.point.name +'</b>: '+ this.percentage +' %';}}}},series: [{type: 'pie',name: 'Browser share',data: [['Firefox',   45.0],['IE',       26.8],{name: 'Chrome',y: 12.8,sliced: true,selected: true},['Safari',    8.5],['Opera',     6.2],['Others',   0.7]]}]});});

View Code

其中data属性为图表绑定数据源。但这种方式也存在明显问题:

  • 前端代码量过大
  • 绑定动态数据比较困难,可取的方法是使用$.AJAX异步方法解析WebServices或者一般处理程序ashx,然后对返回结果进行JSON序列化处理,比较麻烦容易出错。
  • HighCharts的Js调用代码无法实现代码重用。

解决方案是使用第三方HighCharts组件DoNet.HighCharts, 该组件是一个服务器端生成HighCharts Js脚本的开源组件,然后通过输出流的方式插入到页面Body块的DIV中,原理如下图所示:

DoNet.HighCharts开发环境为(二选一)

  • VS2008+ASP.NET MVC3+.NET 3.5
  • VS2010+.NET 4.0

DoNet.HighCharts开源项目是以ASP.NET MVC3 Project的形式分发的,开发人员可以参考控制器文件夹Controlls中的DemoController中每种图表的后台代码(和前台HighCharts JS代码基本一致)

MVC原理在这里做简单表述,便于程序员阅读该代码。

  • M:Module 模型层
  • V:View 视图层
  • C:Controll 控制层

当客户端发送一个Action动作时,根据动作名找到Controll控制器中相应的方法名。例如http://localhost/Charts/Demo/BasicLine,MVC框架根据全局路由配置自动映射到BasicLine控制器方法,控制器方法返回一个Result并导航到Views文件夹下的同名视图BasicLine.cshtml(cshtml可以理解为WebForm的aspx)然后加载视图。

Asp.net mvc和Asp.net Web Form方式不同,所以以上MVC实现方式需要修改才能在WebForm中使用。以下以“各种类产品均价统计功能”柱形图(涉及到NorthWind数据 库的Products和Categories表)为例说明WebForm中如何使用DoNet.HighCharts。

1:   创建查询视图View_CategoryAvgPrice

2:   创建强名称数据集NorthWind.xsd

数据集分为强名称数据集和弱名称数据集(DataSet)两种,具体原理就不展开描述了。拖放View_CategoryAvgPrice和Categories表到数据集中。

3:   柱形图控制器方法(ColumnWithDrilldown)在aspx页面中的主要代码实现

柱形图控制器方法(ColumnWithDrilldown)在aspx页面中的主要代码实现//导入DoNet.HighCharts包
using DotNet.Highcharts;
using DotNet.Highcharts.Options;
using DotNet.Highcharts.Enums;
using DotNet.Highcharts.Helpers;
using System.Drawing;
using  NorthWindTableAdapters;/// <summary>
/// 种类商品价格统计类
/// </summary>
public class CategoryPrice
{public Decimal Price { set; get; }public string CategoryName { set; get; }
}public partial class ColumnWithDrilldown : System.Web.UI.Page
{#region 创建强名称数据集表对象和数据适配器对象
private NorthWind.View_CategoryAvgPriceDataTable avgPriceDt;
avgPriceDt= new NorthWind.View_CategoryAvgPriceDataTable();private NorthWind.CategoriesDataTable categoryDt = new NorthWind.CategoriesDataTable();private View_CategoryAvgPriceTableAdapter avgPriceAdapter = new View_CategoryAvgPriceTableAdapter();private CategoriesTableAdapter categoryAdapter = new CategoriesTableAdapter();#endregionprivate List<CategoryPrice> avgPriceList=null;//绑定数据源集合protected void Page_Load(object sender, EventArgs e){LoadColumnWithDrilldown();}public void LoadColumnWithDrilldown(){avgPriceAdapter.Fill(avgPriceDt);categoryAdapter.Fill(categoryDt);//按产品种类分组显示Linq表达式avgPriceList =(from p in avgPriceDtgroup p by p.CategoryID into g//根据种类编号分组select new CategoryPrice{//种类名称CategoryName=categoryDt.First(c=>c.CategoryID==g.Key).CategoryName,//种类商品均价Price = g.Average(c => c.UnitPrice)}).ToList();//显示柱形图的种类名称数组string[] categories = new string[avgPriceList.Count()];int index = 0;foreach (var item in avgPriceList){categories[index++] = item.CategoryName;}Data data = LoadDate();//柱形图动态绑定的数据源//省略HighCharts脚本代码,同mvc代码div1.InnerHtml = chart.ToHtmlString();//转换为HighCharts的客户端脚本插入到div1中
}//根据汇总的种类商品创建柱形图节点对象的方法private  Data LoadDate(){Data data = null;int index =-1;//创建柱形图显示的节点对象DotNet.Highcharts.Options.Point []pointList=new DotNet.Highcharts.Options.Point[avgPriceList.Count];foreach (var item in avgPriceList){pointList[++index] = new DotNet.Highcharts.Options.Point{Y = (Number)(item.Price*100)/100.0,Color = Color.FromName(string.Format("colors[{0}]", index))};}data = new Data(pointList);return data;}
}

View Code

显示效果如下图所示:

开源项目DoNet.HighCharts网址:http://dotnethighcharts.codeplex.com/

HighCharts Jquery网址:http://www.highcharts.com/demo/

转载于:https://www.cnblogs.com/8090sns/archive/2013/05/20/3088626.html

Donet.HighCharts相关推荐

  1. html使用highcharts绘制饼图,html js highcharts绘制圆饼图表

    jquery实现饼状图效果 - 站长素材 var chart; $(function () { var totalMoney=999 var zccw=178 var sycw=821 $(docum ...

  2. statpot:使用mongo+bootstrap+highcharts做统计报表

    最近做了一个统计项目,这个统计项目大致的需求是统计接口的访问速度.客户端会调用一个接口来记录接口的访问情况,我的需求就需要分析这些数据,然后做出个统计报表. 需求实现 最初的时候想着每天把这些接口访问 ...

  3. HighCharts基本使用

    一.简叙 HighCharts是一个非常强大的画图插件,在以后的工作汇报,数字展示,它将是一把利器.既然是插件,那么就有它的使用规则,我们只需要遵循它的使用规则,就可以画出我们想要的展示效果了.期待吗 ...

  4. js图表控件:highcharts的应用(二)

    柱状图 前台代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="zhux ...

  5. HighCharts使用心得

    前言: 之前非常早的一个项目中使用过highcharts.感觉挺方便的,图表类型也比較丰富.并且还支持数据的下钻,可是假设投入商业使用的话还会有一些版权的问题,所以后来就使用了EChart.这是百度开 ...

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

    HighCharts是开源的Web图表js组件,与D3.js一样,经常用于数据可视化.HighCharts图表类型丰富,功能非常强大,是很好的数据可视化解决方案,其官方网站为:http://www.h ...

  7. php后台数据显示到前端,php,前端_怎么在javascript中得到后台数据?,php,前端,javascript,highcharts - phpStudy...

    怎么在javascript中得到后台数据? 最近在研究在网页中嵌入hightchart的表格 在嵌入时发现需要在javascript中得到后台的一组数据 代码如下 require_once('incl ...

  8. highcharts与ajax的应用

    整理一份完整的例子,以供参考: <1>页面chart.html: <span style="font-size:14px;"><!DOCTYPE HT ...

  9. vue ajax highcharts,在vue项目中引入highcharts图表的方法(详解)

    npm进行highchars的导入,导入完成后就可以进行highchars的可视化组件开发了 npm install highcharts --save 1.components目录下新建一个char ...

  10. 转: HighCharts 详细使用及API文档说明

    一.HighCharts开发说明: HighCharts开发实际上配置HighCharts每个部分,比如配置标题(title),副标题(subtitle)等,其中每个部分又有更细的参数配置,比如标题下 ...

最新文章

  1. 大凉山的美术课,怎么就跟英特尔扯上关系了
  2. UVa910 TV game
  3. Java基础——异常处理
  4. linux rm命令
  5. [转]面向接口编程详解(一)——思想基础
  6. 设计模式之观察者模式在Listview中的应用
  7. DUMP文件分析6:简单的堆破坏示例
  8. android9 mate10,华为仅这四部手机升到安卓9.0,Mate10和P20用户窃喜!
  9. 《Microsoft Sql server 2008 Internal》读书笔记--第六章Indexes:Internals and Management(10)
  10. 微分方程计算机仿真国内外研究论文,微分方程数值解法毕业论文--开题报告.doc...
  11. 安装Editplus软件
  12. 我在公司彻夜撸码,老板天天开X6夜店蹦迪,到头来工资还拖欠
  13. javascript开发HTML5游戏--斗地主(单机模式part3)
  14. 爬取软科中国最好大学排名
  15. Android Kotlin okhttp Retrofit 线程协程那些事
  16. 1.Storm-简介
  17. 【Project】Face Recognition
  18. Head First C - C语言入门
  19. 药明生基扩建美国费城细胞及基因疗法生产基地
  20. how2j:JAVA学习笔记——DAY 9

热门文章

  1. 鸟哥的Linux私房菜(基础学习篇第四版)学习笔记
  2. 金晨想在无人车上劈叉,撒贝宁与数字祝融号对话…这届百度世界大会,有被惊艳到...
  3. ST语言和C语言的区别 STC
  4. idea 安装Vue插件 超详细
  5. 【初学者必知必会】【电子技术:数电 模电 单片机】【基础概念和小知识点】详解
  6. 如何将数字转化为中文大写
  7. Java技术栈(总图)
  8. Ansys HFSS仿真
  9. echarts写地图,调用本地地图json数据,实现秒下钻功能
  10. nodejs 截断字符串_JS对于字符串的切割截取