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. python的全局函数

    1.Python的全局函数 import builtins dir(builtins)  abs  # 返回参数的绝对值 可以写成函数:def absnum): if num >=0: retu ...

  2. 将SublimeText3打造成简易Java IDE

    简介与优点 使用该教程,你能使你的Sublime Text3可以作为一个精简版的JAVA IDE工具 既可以独立在cmd控制台运行也可以在Sublime自带的控制台运行 运行后不会有乱码 报错后可以在 ...

  3. JUC并发编程--AQS

    转自: https://www.jianshu.com/p/d8eeb31bee5c 前言 在java.util.concurrent.locks包中有很多Lock的实现类,常用的有Reentrant ...

  4. Restful 风格是什么?

    1.1 什么是RESTful 1. REST与技术无关,代表的是一种软件架构风格(REST是Representational State Transfer的简称,中文翻译为"表征状态转移&q ...

  5. windows 10 启动修复无法自动修复此计算机

    1. 失败后有两个选项卡:关机和高级选项,选择高级选项 2. 然后选择疑难解答 3. 选择高级选项 4. 选择回退到以前的版本 接下来需要登录,选择恢复到上一次正常启动的状态,注意选择保留数据,会有提 ...

  6. OpenCV图像处理学习笔记-Day4(完结)

    OpenCV图像处理学习笔记-Day4(完结) 第41课:使用OpenCV统计直方图 第42课:绘制OpenCV统计直方图 pass 第43课:使用掩膜的直方图 第44课:掩膜原理及演示 第45课:直 ...

  7. 012 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 06 浮点型“字面值”

    012 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 06 浮点型"字面值" 浮点型字面值 首先要知道一点:在整型部分中,默认情况下,即整型数 ...

  8. 111 01 Android 零基础入门 02 Java面向对象 04 Java继承(上)02 继承的实现 01 继承的实现

    111 01 Android 零基础入门 02 Java面向对象 04 Java继承(上)02 继承的实现 01 继承的实现 本文知识点: 继承的实现 说明:因为时间紧张,本人写博客过程中只是对知识点 ...

  9. Linux就该这么学28期——Day05 vim编辑器与Shell命令脚本 (yum配置 网卡配置)

    vim 三种模式: 命令模式 按行操作 dd 剪切.删除 5dd dG   全删 yy 复制光标所在行 p 粘贴 u 撤销操作 / 搜索 /ab n  下一个 N   上一个 输入模式 a 当前光标处 ...

  10. pytest文档47-allure报告添加用例失败截图

    前言 使用 selenium 做 web 自动化的时候,很多小伙伴希望用例失败的时候能截图,把异常截图展示到allure报告里面. pytest 有个很好的钩子函数 pytest_runtest_ma ...