Highcharts 的使用(各种统计图)(难点:绑定数据)
2017-08-02 20:46
399 查看
Hello,EveryBody。
今天搞了搞Highcharts 的柱状图 ,
最大的难点就是绑定数据的时候。遇到了很多困难。也试了非常多的方法去 绑定数据。也在网上搜索了好多。查到的几乎都没有什么帮助。所以写下了这篇博客,来给 初次使用Highcharts 和 我一样正在头疼的 的小白一点点帮助。嘿嘿。
下面呢 就开始我们今天的主要内容了。
1.我们先打开 官方下载的 文件包
打开 index.htm 页面 里面有非常多的 统计图。 我是用的是3D charts 中的 3D column 也就是 3D的柱状图。 选择一个 后 会有非常棒的 效果。 我们 查看 页面的源代码。 全部复制到项目中。 将js包 的路径 改一改。弄成自己项目中Highcharts js包的路径。然后 运行看下效果。2.修改代码
我用的是vs2017写的。语言是 C#框架是 ASP.Net MVC
@using System.Collections @{ ViewBag.Title = "Index"; } <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Highcharts Example</title> <style type="text/css"> /*这里是设置画布和 拖拉块*/ #container, #sliders { min-width: 310px; max-width: 800px; margin: 0 auto; } #container { height: 400px; } </style> </head> <body> <!--这里是js包--> <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script> <script src="../../code/highcharts.js"></script> <script src="../../code/highcharts-3d.js"></script> <script src="../../code/modules/exporting.js"></script> <!--这里可以理解为 画布--> <div id="container"></div> <!--这里是几个控制拖动块--> <div id="sliders"> <table> <tr> <td>Alpha Angle</td> <td><input id="alpha" type="range" min="0" max="45" value="15"/> <span id="alpha-value" class="value"></span></td> </tr> <tr> <td>Beta Angle</td> <td><input id="beta" type="range" min="-45" max="45" value="15"/> <span id="beta-value" class="value"></span></td> </tr> <tr> <td>Depth</td> <td><input id="depth" type="range" min="20" max="100" value="50"/> <span id="depth-value" class="value"></span></td> </tr> </table> </div> @{//ASP.Net的前台写法 //接到MVC控制器中的ViewBag.name //(格式是 : yuwen,shuxue,yinyu ) var name = ViewBag.name; //接到MVC控制器中的ViewBag.chenji //(格式是 : 1,2,3,4,5,6 ) var chenji = ViewBag.chenji; } <script type="text/javascript"> //这里是js var name = "@name";//新建一个 name变量存柱子的名称 var chenji = "@chenji";//新建一个 name变量存柱子的数值 var nameArry = name.split(','); //因为 柱子名称需要的数据格式是数组, //所以我们将原来的字符串分割,就变成了数组了。 //我们就可以直接给统计图赋值了。 //下面是 统计图的主体js代码了。 var chart = new Highcharts.Chart({ chart: { renderTo: 'container',//这里是指定 画布id的地方 type: 'column',//这里是统计图的类型 options3d: { enabled: true,//这里是统计图的3D开关 //下面的几个就是设置3D的角度之类的 alpha: 15, beta: 15, depth: 50, viewDistance: 25 } }, //logo网址 //这里是设置的 logo的链接。 //默认是有一个官方网址的,这里写出来。 //然后弄成空的。就可以去掉那个logo网址了。 credits: { text: '', href: '' }, //标题 title: { text: '3班所有人的平均成绩' }, //副标题 subtitle: { text: '' }, //x轴 xAxis: { title: { text: '科目' }, //柱子的名称 categories: eval(nameArry) //这里我们将事先准备好的 柱子名称数组 放入. //我们的柱子下方就有名称了。这里必须用eval(); }, //y轴 yAxis: { title: { text: '分数' } }, plotOptions: { column: { //柱子的厚度 depth: 80, //柱子上面的 数值 dataLabels: { enabled: true,//这里是开启 每个柱子上方的 数值的开关 style: { color: 'red'//数值字体颜色 } } } }, //柱子的高度。(数据) series: [{data: eval("[" + chenji + "]")}] //这个data后面 可以写 固定的数字。也可以写json , //json 可以同时显示出柱子名称(name),柱子颜色,和值(y) //这里按照这个写法, 必须用eval(); //eval()只有一个参数。如果传入的参数不是字符串,它直接返回这个函数。 //如果参数是字符串,它会把字符串当成JavaScript代码进行编译, //如果编译失败者抛出一个语法错误异常。 }); function showValues() { $('#alpha-value').html(chart.options.chart.options3d.alpha); $('#beta-value').html(chart.options.chart.options3d.beta); $('#depth-value').html(chart.options.chart.options3d.depth); } $('#sliders input').on('input change', function () { chart.options.chart.options3d[this.id] = parseFloat(this.value); showValues(); chart.redraw(false); }); showValues(); </script> </body> </html>
这个是我的 MVC控制器的代码(C#语言)
using System; using System.Web.Mvc; namespace day1.Controllers { public class HomeController : Controller { public ActionResult Index() { //两个string,用于接收 名称和数值 string chenji = String.Empty; string name = String.Empty; //这里是从数据库查询到的数据。 //(由于是个demo ,数据访问这边的层级写的简单了点) var dataList = Dal.ShowDay1s(); //循环数据 取出chenji ,并用逗号分割 for (int i = 0; i <dataList.Count ; i++) { chenji += dataList[i].chenji; if (i != dataList.Count - 1) { chenji += ","; } } //取出name for (int i = 0; i < dataList.Count; i++) { name += dataList[i].Name; if (i != dataList.Count - 1) { name += ","; } } //将两个string 传到前台 ViewBag.chenji= chenji; ViewBag.name = name; return View(); } } }
3.大功告成。
用了好多种方式 最后这种方法可以实现。 ajax 也用了。 不过感觉ajax在统计图之后执行的所以他的值根本不能生效。 还用了 动态赋值。 可是 还是没有用。 我们将数值写死,可以成功显示,像这种不确定的数量和值。我试了试 没有成功, 有兴趣的朋友也可以研究一下。 研究出来 记得 分享给我哟。。 嘻嘻。 我是个小白。求照顾,求关爱。(比心心)
这个柱状图用法就是这么多了, 其他类型的图。也是大同小异。 网上也有 一些 每个方法的属性 和 默认值格式之类的word文档。 大家可以下载一下。 就可以扩展出更多的功能了。嘿嘿。。
“`
相关文章推荐
- highcharts使用之使用数组数据绑定数据
- asp.net中的各种数据绑定使用
- asp.net中的各种数据绑定使用
- 数据绑定(Databind)与 repeater 控件的使用。
- .net学习_使用databinder进行数据绑定20060525
- JST+JSON+AJAX——使用客户端js模版代替服务端数据绑定
- Access2000各种数据类型的含义和使用方法
- 使用Office Web Components (OWC)来创建统计图的一个数据类。
- 如何使用 DataBinder.Eval(Container.DataItem,"num","{0:p}") 对DataList 进行数据绑定
- 如何解决FormView中实现DropDownList连动选择时出现 "Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用" 的错误
- Repeater 实现分页、自行绑定数据,对Repeater 进行镶嵌使用
- 关于使用asp.net 的分页显示数据。Repeater绑定数据后的分页显示。
- 解决Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用
- Effective C# 原则38:使用和支持数据绑定(译)
- JST+JSON+AJAX——使用客户端js模版代替服务端数据绑定
- 使用Repeater实现自定义多列数据绑定
- (转贴)使用Repeater实现自定义多列数据绑定
- 如何使用DataBinder.Eval()方法进行数据绑定
- 关于数据绑定,还有DropDownList和DATAGRID的使用
- 【翻译】使用XML为列表控件绑定数据