博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Highchart的一些总结
阅读量:6961 次
发布时间:2019-06-27

本文共 3555 字,大约阅读时间需要 11 分钟。

近日用Highchart做了个小功能,在后面动态配置数据源,然后在前面用Highchart显示出数据源中相关的那些数据,

写了一天的这个功能,我觉得吧,最激动人心的就是在前面转化datatable的这段上面

在数据源中,我是定了一个这样的列表,这样动态设置数据源的方式有一个好处,就是以后解析的话,你只需要写sql语句或者sql的存储过程,前面怎么样解析是不用去管,有点一劳永逸的感觉

数据源示例

统计类 数量 x轴 y轴 类型 单位 标题
维修单 10 XX机构 单位(张) column XXOO图表统计
维修单 10 XX机构 单位(张) column XXOO图表统计
装修单 10 YY机构 单位(张) column XXOO图表统计

然后在后台的代码页中读取这个数据源,并且将数据源组装成json绑定到Highchart中

这样的话会遇到两个问题

1.数据源中的每一个[x轴]中对应的统计类数量不一致

2.转化成json的时候读取datatable的顺序不一致,导致统计类的数据出现张冠李戴的数量

对于问题一的话,解决思路如下

获取[统计类]种类最多的那个X轴名称=>获取对应的那个[x轴]下面对应的]统计类]列表=>对比其他[x轴]下面的统计类,如果[统计类]数量一样,跳过,不一样则添加一条数量为0的记录

(X,好像越写越乱了)果断上代码

///     /// 转化DataTable    ///     ///     private void ChangeTable(ref DataTable dt)    {        //统计类最多的X轴大类        string MaxTypex = GetMaxType(dt);        //获取统计类最多的X轴大类下面所有的统计类        List
li = (from dts in dt.AsEnumerable() where dts["类型"].ToString() == "column" && dts["x轴"].ToString() == MaxTypex select dts["统计类"].ToString()).Distinct().ToList(); List
Typex = (from dts in dt.AsEnumerable() where dts["类型"].ToString() == "column" && dts["x轴"].ToString() != MaxTypex select dts["x轴"].ToString()).Distinct().ToList(); for (int i = 0; i < Typex.Count; i++) { //比较li中的数据,如果没有的话,添加进datatable,但是他的数量为0 InsertTable(ref dt, Typex[i], li, MaxTypex); } } private void InsertTable(ref DataTable dt, string Typex, List
li, string MaxTypex) { List
Countli = (from dts in dt.AsEnumerable() where dts["类型"].ToString() == "column" && dts["x轴"].ToString() == Typex select dts["统计类"].ToString()).Distinct().ToList(); if (Countli.Count == li.Count) { return; } for (int i = 0; i < li.Count; i++) { if (!Countli.Contains(li[i])) { DataRow dr = dt.NewRow(); dr["x轴"] = Typex; dr["统计类"] = li[i]; dr["数量"] = 0; dr["类型"] = "column"; dt.Rows.Add(dr); } } } //获取x轴上统计类最多的一个x轴类别 private string GetMaxType(DataTable dt) { //获取x轴中所有的类别->获取x轴类别下面所有统计类的数量->取数量最多的那个-返回 List
li = (from dts in dt.AsEnumerable() where dts["类型"].ToString() == "column" select dts["x轴"].ToString()).Distinct().ToList(); DataTable dtTemp = new DataTable(); dtTemp.Columns.Add(new DataColumn("Key", typeof(String))); dtTemp.Columns.Add(new DataColumn("value", typeof(Int32))); for (int i = 0; i < li.Count; i++) { // matchs.Add(li[i], dt.Select("类型='column' and x轴='" + li[i] + "'").Count());DataRow drTemp=dtTemp.NewRow(); drTemp["Key"] = li[i]; drTemp["value"] = dt.Select("类型='column' and x轴='" + li[i] + "'").Count(); dtTemp.Rows.Add(drTemp); } //遍历临时的datatable 获取最大的value值,如果有两个以上相同最大的,获取第一个 int MaxValue = Convert.ToInt32(dtTemp.Rows[0]["value"]); for (int j = 0; j < dtTemp.Rows.Count; j++) { if (MaxValue < Convert.ToInt32(dtTemp.Rows[j]["value"])) { MaxValue = Convert.ToInt32(dtTemp.Rows[j]["value"]); } } string MaxKey = dtTemp.Select("value=" + MaxValue)[0]["Key"].ToString(); return MaxKey; }

对于问题2的,只要把原先的数据源排下序就好了,先根据X排序,再排统计类

private void ShortTable(ref DataTable dt)    {        dt.DefaultView.Sort = "x轴,统计类";        dt = dt.DefaultView.ToTable();    }

 

 

转载于:https://www.cnblogs.com/SharkLock-Chen/archive/2012/09/01/2666801.html

你可能感兴趣的文章
ACtiiveMQ安装 Ubuntu
查看>>
四色原则
查看>>
1.sql数据处理问题
查看>>
企业管理:如何规范员工上网行为,提高员工工作效率
查看>>
LINUX创建、删除用户和用户组;修改密码
查看>>
深入理解乐观锁与悲观锁
查看>>
CocoaPods的使用
查看>>
find命令详解
查看>>
变频电源内部IGBT模块的作用是什么样的
查看>>
手机PDF文件怎么压缩得更小,PDF文件如何压缩?
查看>>
超声波清洗机对人体有辐射,有伤害吗?
查看>>
区块链成多地政府工作报告新热词
查看>>
论职场沟通的重要性
查看>>
velocity模板中后台返回html,前端无法跳转页面
查看>>
AJPFX:如何保证对象唯一性呢?
查看>>
天禹智控--现场标准气体如何使用?
查看>>
CSS3:border-radius隐藏的威力
查看>>
springMVC 返回类型选择 以及 SpringMVC中model,modelMap
查看>>
存储型XSS进阶 [猜测规则,利用Flash addCallback构造XSS]
查看>>
[Openshift Origin 3]OpenShift 3 : 基于Docker的私有PaaS平台
查看>>