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. 关于TCP建立连接

    TCP大家大多称之为"三次握手".今天看了一篇文章,学到了"三步握手". TCP建立连接,客户端发送SYN给服务端,服务端接收到请求回应ACK.服务端发送SYN ...

  2. 详细分析 Java 中实现多线程的方法有几种?(从本质上出发)

    详细分析 Java 中实现多线程的方法有几种?(从本质上出发) 正确的说法(从本质上出发) 实现多线程的官方正确方法: 2 种. Oracle 官网的文档说明 方法小结 方法一: 实现 Runnabl ...

  3. 最精美详尽的 HTTPS 原理图!

      来源:r6a.cn/ffJk 作为一个有追求的程序员,了解行业发展趋势和扩充自己的计算机知识储备都是很有必要的,特别是一些计算机基础方面的内容,就比如本篇文章要讲的计算机网络方面的知识.本文将为大 ...

  4. PPT画成这样,述职答辩还能过吗?

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 标题有点凶,但内容很干! 大部分程序员并不会画PPT,也梳理不出架构图.工作的年头虽 ...

  5. PHP_加密解密字符串

    PHP_加密解密字符串.php <?php //加解密字符串函数,可以加密中文 /* //加密 echo $encode = authcode('爱迪生', 'ENCODE', '3'); // ...

  6. java学习网站汇总

    1.https://blog.csdn.net/qq_35571554/article/details/82759668 B+树原理漫画讲解2.https://blog.csdn.net/moakun ...

  7. Centos-对比文件差异-diff

    diff 比较文件差异 相关选项 -c 显示全部内容,并标记不同之处 -b 忽略行尾空格,并认为字符串中一个或多个空格视为相同 -r  当比较双方都是目录时,会比较子目录中的文件 -s 当两个文件相同 ...

  8. java安全编码指南之:死锁dead lock

    目录 简介 不同的加锁顺序 使用private类变量 使用相同的Order 释放掉已占有的锁 简介 java中为了保证共享数据的安全性,我们引入了锁的机制.有了锁就有可能产生死锁. 死锁的原因就是多个 ...

  9. 使用Maven那么久了,你对企业级Maven的核心配置了解多少?

    写在前面 相信从事Java工作的小伙伴们多多少少都会接触到Maven.使用Maven来搭建项目,能够极大的方便我们构建项目的依赖关系,对于项目中需要依赖的Jar包,也只是简单的在pom.xml中进行配 ...

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

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