EEP JQuery如何实现统计图表

讯光科技

前言

在ERP项目开发过程中,统计图表(chart)普遍应用于各种统计和报表中,其形象直观,内容清晰。EEP的JQuery网站项目使用了Easyui 插件并且进行了包装,但是easyui并没有提供图表相关的组件和实现方法。为了实现图表功能,需要使用另一些第三方JQuery图表插件来实现图表的功能。本文使用基于jQuery的开源javascript绘图库插件Flot,并结合EEP的N-Tier架构来实现简单的柱状图(barchart)和饼状图(piechart)设计。

准备工作

数据源:使用SQL Server 范例数据库Northwind 的Orders表与Order Details表。

EEP2012:使用EEP2012的JQWebClient网站。

Flot插件下载:http://code.google.com/p/flot/ 并且将需要使用的JS檔加入到EEP的JQWebClient网站中。

Bar chart实例

(1)   实现功能:统计1997年订单的每月销售额, 并以Barchart做比较。

(2)   数据库语句:
select month(orders.OrderDate) as Month,sum(Orders.TotalAmout) as TotalAmount from orders where year(orders.OrderDate)=1997 group by month(orders.OrderDate)

(3)   建立Server端:使用SSingle模版加入一个Server端命名为SBarChart,然后将以上数据库语句复制到Master(infocommand组件)的CommandText属性上,build这个Server端工程。然后在EEPNetServer的Package Manager上加入build好的SBarChart.dll。

(4)   建立Client端:在JQWebClient网站下建立一个ChartExample文件夹存放我们范例的网页,在这个文件夹下加入一个空白网页BarChart.aspx。然后加入EEP使用的js,以及Flot使用的js的参考。

<!-- infolight and easyui js -->

<link href="../js/themes/default/easyui.css" rel="stylesheet" />

<link href="../js/themes/icon.css" rel="stylesheet" />

<script src="../js/jquery-1.8.0.min.js"></script>

<script src="../js/jquery.easyui.min.js"></script>

<script src="../js/jquery.json.js"></script>

<script src="../js/jquery.infolight.js"></script>

<script type="text/javascript" src="../js/datagrid-detailview.js"></script>

<!-- flot js -->

<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../flot-master/excanvas.min.js"></script><![endif]-->

<script language="javascript" type="text/javascript" src="../flot-master/jquery.flot.js"></script>

<script language="javascript" type="text/javascript" src="../flot-master/jquery.flot.categories.js"></script>

<script language="javascript" type="text/javascript" src="../flot-master/jquery.flot.pie.js"></script>

(5)   加入一个div用作图表的显示区域,加入id等属性,以及EEP使用的参数选项infolight-options

<div id="chartid" style="width:auto;height:500px"     infolight-options="remoteName:'SBarChart.Master',tableName:'Master',xField:'Month',yField:'TotalAmount'">

</div>

(6)   加入绘制图表的JS代码。

<script type="text/javascript">

$(document).ready(function () {

var data = [];

var target = $('#chartid');

//获取参数

var remoteName = getInfolightOption(target).remoteName; //Server端remote

var tableName = getInfolightOption(target).tableName; //Server端table

var xField = getInfolightOption(target).xField; //X轴字段

var yField = getInfolightOption(target).yField; //Y轴字段

var url = getRemoteUrl(remoteName, tableName, false); //呼叫Server取得数据的url

var queryWord = new Object(); //查询条件

$.ajax({

type: "POST",

url: url,

data: "queryWord=" + $.toJSONString(queryWord),

cache: false,

async: false,

success: function (returndate) {

if (returndate != null) {

var rows = $.parseJSON(returndate)//将回传的字符串转换成json

for (var i = 0; i < rows.length; i++) {

data[i] = [rows[i][xField], rows[i][yField]]; //给data数组赋值

}

}

},

error: function () {

alert('error');

}

});

$.plot(target, [data], {//将显示的数据内容给予显示的div

series: {

bars: {

show: true,

barWidth: 0.8,

align: "center"

}

},

xaxis: {

mode: "categories",

tickLength: 0

}

});

})

</script>

(7)   在EEPManager中将这个页面挂在Menu上并且设定权限,然后通过VS开启Logon.aspx登陆浏览这个页面。

Pie chart实例

(1)   实现功能:根据不同产品代号,计算单一产品的订单总额,取产品代号1-10做成饼状图。

(2)   数据库语句:
select [Order Details].ProductID,sum([Order Details].UnitPrice*[Order Details].Quantity) as Amout from [Order Details] group by [Order Details].ProductID

(3)   建立Server端:使用SSingle模版加入一个Server端命名为SPieChart,然后将以上数据库语句复制到Master(infocommand组件)的CommandText属性上,build这个Server端工程。然后在EEPNetServer的Package Manager上加入build好的SPieChart.dll。(如同SBarChart.dll的操作方式)

(4)   建立Client端:在JQWebClient网站下的文件夹ChartExample存放我们范例的网页,在这个文件夹下加入一个空白网页PieChart.aspx。然后加入EEP使用的js,以及Flot使用的js引用。(EEP的js同BarChart.aspx的范例)

<script language="javascript" type="text/javascript" src="../flot-master/jquery.flot.js"></script>

<script language="javascript" type="text/javascript" src="../flot-master/jquery.flot.categories.js"></script>

<script language="javascript" type="text/javascript" src="../flot-master/jquery.flot.pie.js"></script>

(5)   加入一个div用作图表的显示区域,加入id等属性,以及EEP使用的参数选项infolight-options:

<div id="chartid" style="width:auto;height:500px"     infolight-options="remoteName:'SPieChart.Master',tableName:'Master',labelField:'ProductID',valueField:'Amout'"></div>

(6)   加入绘制图表的JS代码:

<script type="text/javascript">

function labelFormatter(label, series) {

return "<div style='font-size:8pt; text-align:center; padding:2px; color:white;'>ProcuctID: "

+ label + "<br/> TotalAmout: " + series.data[0][1] + "</div>";

}

$(document).ready(function () {

var data = [];

var target = $('#chartid');

//获取参数

var remoteName = getInfolightOption(target).remoteName; //Server端remote

var tableName = getInfolightOption(target).tableName; //Server端table

var labelField = getInfolightOption(target).labelField; //显示的label字段

var valueField = getInfolightOption(target).valueField; //值的字段

var url = getRemoteUrl(remoteName, tableName, false); //呼叫Server取得数据的url

var queryWord = new Object();

queryWord.whereString = "ProductID >=1 and ProductID <10"; // 查询条件

$.ajax({

type: "POST",

url: url,

data: "queryWord=" + $.toJSONString(queryWord),

cache: false,

async: false,

success: function (returndata) {

if (returndata != null) {

var rows = $.parseJSON(returndata)

for (var i = 0; i < rows.length; i++) {

data[i] = {

label: rows[i][labelField],

data: rows[i][valueField]

}

}

}

},

error: function () {

alert('error');

}

});

//flot自身方法

$.plot(target, data, {//将显示的数据内容给予显示的div

series: {

pie: {

show: true,

radius: 1,

label: {

show: true,

radius: 1,

formatter: labelFormatter,

background: {

opacity: 0.8

}

}

}

},

legend: {

show: false

}

});

})

</script>

在EEPManager中将这个页面挂在Menu上并且设定权限,然后通过VS开启Logon.aspx登陆浏览这个页面。

结语

以上是EEP结合Flot插件绘制柱状图和饼状图的简易范例,在设计项目的过程中我们可能不是如此简单的单一幅图,也可能并不是使用flot插件,但是方法是通用的。以此范例抛砖引玉,可以看出此类控件的3个重点,第一加入需要使用到的js引用;第二,设定先是图表的div,注意infolight-option里设定显示统计图的数据源以及图表上的所要显示的字段;第三,通过js程序读取div上设定的数据源以及显示字段(读取后转成JSON格式),并将其内容显示在div上。由此可见,利用EEP的N-Tier架构从Server端获取到数据之后,前端只要将数据转换成需要的数据形式(如JSON)交给绘图外挂组件,就能轻松完成统计图表了。

JQuery如何实现统计图表的更多相关文章

  1. [Web][高中同学毕业分布去向网站+服务器上挂载]二、敲定思路与方向(HTML5+JS(JQuery+ECharts))

    高中同学毕业分布网站:敲定思路 一.背景 第一集:http://www.cnblogs.com/Twobox/p/8368121.html 中大体确定了自己的 大体目标.大体思路. 但是 . 在今天的 ...

  2. jquery 绘图工具 flot 学习笔记

    今天想做一个统计图表,像163博客的流量统计一样的,借助 flot 实现了,而且很简单. flot网址:http://code.google.com/p/flot/ 下载 JS 文件,使用方法和 jq ...

  3. Angular杂谈系列1-如何在Angular2中使用jQuery及其插件

    jQuery,让我们对dom的操作更加便捷.由于其易用性和可扩展性,jQuer也迅速风靡全球,各种插件也是目不暇接. 我相信很多人并不能直接远离jQuery去做前端,因为它太好用了,我们以前做的东西大 ...

  4. jQuery UI resizable使用注意事项、实时等比例拉伸及你不知道的技巧

    这篇文章总结的是我在使用resizable插件的过程中,遇到的问题及变通应用的奇思妙想. 一.resizable使用注意事项 以下是我在jsfiddle上写的测试demo:http://jsfiddl ...

  5. Jquery的点击事件,三句代码完成全选事件

    先来看一下Js和Jquery的点击事件 举两个简单的例子 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...

  6. jQuery实践-网页版2048小游戏

    ▓▓▓▓▓▓ 大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了, ...

  7. jquery和Js的区别和基础操作

    jqery的语法和js的语法一样,算是把js升级了一下,这两种语法可以一起使用,只不过是用jqery更加方便 一个页面想要使用jqery的话,先要引入一下jqery包,jqery包从网上下一个就可以, ...

  8. jQuery之ajax实现篇

    jQuery的ajax方法非常好用,这么好的东西,你想拥有一个属于自己的ajax么?接下来,我们来自己做一个简单的ajax吧. 实现功能 由于jq中的ajax方法是用了内置的deferred模块,是P ...

  9. 利用snowfall.jquery.js实现爱心满屏飞

    小颖在上一篇一步一步教你用CSS画爱心中已经分享一种画爱心的方法,这次再分享一种方法用css画爱心,并利用snowfall.jquery.js实现爱心满屏飞的效果. 第一步: 利用伪元素before和 ...

随机推荐

  1. java版app自动化测试初始化模板

    项目目录介绍 目录结构如下: (包含:驱动的基础配置.全局异常处理.异常截图.报告自动生成.app常用操作方法封装.常用工具类封装) 各包分层关系 basepage包负责存放app公共操作方法.And ...

  2. 点、像素、分辨率、PPI、DPI等

    屏幕尺寸 屏幕尺寸是屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米. pixel 像素,它是组成图片的最小单元,代表红绿蓝等各种颜色. dot 点,它是屏幕发光.cmos感光的最小物理单元,水平 ...

  3. Centos-bash-4.1$

    错误: -bash-4.1$ where? 登录Centos时候,会显示4行这样的错误信息-bash-4.1$ why? 1. 该用户家目录缺少 .bashrc .bash_logout .base_ ...

  4. Android 自定义Vie 对勾CheckBox

    天在美团点外卖,有一个商品推荐的条目,上面的CheckBox是自定义的,虽然我们大部分都是用图片来自定义样式.但是还是可以自定义View来绘制的,只要画一个圆和对勾即可. 最终效果 最终效果.png ...

  5. JAVA对象转换为JSON及日期格式转换处理

    1.JSON日期格式转换 默认JSON对DATE类型会转换成一个多属性对象, 而不是单独的一个字符串, 在某些应用处理上不是很方便,  可以利用JsonValueProcessor来实现日期的转换. ...

  6. JDK1.8前_HashMap的扩容机制原理

    最近在研究hashmap的扩容机制,作为一个小白,相信我的理解,对于一些同样是刚刚接触hashmap的白白是有很很大的帮助,毕竟你去看一些已经对数据结构了解透彻的大神谈hashmap的原理等,人家说的 ...

  7. python中def用法

    转载:https://blog.csdn.net/qq_21466543/article/details/81604826 一.函数调用的含义 函数是类似于可封装的程序片段.允许你给一块语句一个名字, ...

  8. 2020年了,IT外企还香吗?

    本来是刚发了<世上有不用加班的程序员吗?>,有朋友问到IT外企不加班福利好什么的,就回复了几句. 老王观点: 现在IT外企已经不值得羡慕了,08.09年那会,ibm,惠普还是香饽饽,当时人 ...

  9. VMware ESXi 客户端连接控制台时,提示“VMRC 控制台连接已断开...正在尝试重新连接”的解决方法

    故障描述: 通过 VMware vSphere Client 连接到安装 VMware ESXi 虚拟环境的主机时,当启动其中的虚拟机后,无法连接到控制台. 选择"控制台"时,控制 ...

  10. RHSA-2018:1700-重要: procps-ng 安全更新(存在EXP、本地提权)

    [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...