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. 开源 UI 库中,唯一同时实现了大表格虚拟化和树表格的 Table 组件

    背景 有这样一个需求,一位 React Suite(以下简称 rsuite)的用户,他需要一个 Table 组件能够像 Jira Portfolio 一样,支持树形数据,同时需要支持大数据渲染. 截止 ...

  2. Python-读写csv数据模块 csv

    案例: 通过股票网站,我们获取了中国股市数据集,它以csv数据格式存储 Data,Open,High,Low,Close,Volume,Adj Close 2016-06-28,8.63,8.47,8 ...

  3. 如何学习iOS开发?iOS Developer Library足矣!

    记得上高中的时候,寄信请教二哥学习经验,二哥来信介绍学习经验说:资料书要快速阅读,把书上的题做完,然后再买几套资料书(习题集)继续练习. 这是二哥的经验,因为他自学能力强,可以消化多套资料书. 我仿照 ...

  4. C++库文件解析(conio.h)

    转载:https://blog.csdn.net/ykmzy/article/details/51276596 Conio.h 控制台输入输出库该文内容部分参照百度百科 Conio.h 在C stan ...

  5. Serial.begin

    串口波特率的设置:通常我们使用Serial.begin(speed)来完成串口的初始化,这种方式,只能配置串口的波特率. 使用Serial.begin(speed, config)可以配置数据位.校验 ...

  6. 浅谈BSGS

    用于求解形如\(a^x≡b\mod p\)的最小非负整数解\(x\). 由欧拉定理\(a^{\phi(p)}≡1\mod p\)可以知道,我们找的解如果有解则一定在\(\phi(p)\)范围内,而最大 ...

  7. 如何检测ASP中的浏览器。NET与浏览器文件

    介绍 ASP.NET是一个用于使用Web表单.MVC.Web API和SignalR(这是官方定义)构建Web应用程序的高生产力框架.它是在.net框架上开发RESTful应用程序或使用HTML.CS ...

  8. CSS元素的显示与隐藏

    CSS元素的显示与隐藏 我们访问某些网站的时候,经常可以看到一些广告弹出来,点击关闭就不见了,但是重新刷新页面后,广告又会重新弹出来.这就是元素的显示和隐藏的一个应用. 1. display属性 di ...

  9. Termux基础教程(二):软件包安装

    Termux基础教程(二):软件包安装 Termux是一个在安卓手机上模拟Linux系统的高级终端,这个终端十分强大,实用. Termux可以安装Liunx的各种软件包,这就是Termux的灵魂所在. ...

  10. 多路查找树(2-3 树、2-3-4 树、B 树、B+ 树)

    本文参考自<大话数据结构> 计算机中数据的存储 一般而言,我们都是在内存中处理数据,但假如我们要操作的数据集非常大,内存无法处理了,在这种情况下对数据的处理需要不断地从硬盘等存储设备中调入 ...