利用c#+jquery+echarts生成统计报表(附源代码)
背景:
因为最近项目要生成报表,经过几轮挑选,最终选择了百度的echarts作为报表基础类库。百度echarts简介请参考 http://echarts.baidu.com/ 虽然echarts功能强大,界面优美,
但是使用起来非常繁琐。本文在参考 星星之火116 写的“Echarts使用心得总结”基础上,进一步对JS进行封装。使得其更具有通用性。
(1)解决方案布局
整个解决方案如下图(VS2010+.NET4.0)。
唯一需要说明的是Javascript文件夹下的JS库,其中jquery-1.8.3是juqery库。 echarts是百度echarts库。MyEcharts.js是在“星星之火”代码的基础上修改的自定义类库。
WapCharts.js是自定义的JS库。

(2)建立数据库
报表数据通常都是从数据库里获取,这里我们使用了微软SQLCE一个桌面版数据库。打开lists表,其中数据如下

(3)读写数据
bin文件夹引入System.Data.SqlServerCe.dll。然后完全可以类似读写MSSQL数据库一样,完成对CE数据库的读写。
其中,需要注意CE数据库连接的写法,因为CE数据库是一个本地数据库,所以,直接用Data Source制定sdf的具体地址即可。
string con = @"Data Source='" + System.Web.HttpContext.Current.Server.MapPath("~/app_data/chartdb.sdf") + "'";

下面代码显示了如何获取饼形数据。
public void GetPie(HttpContext context)
{
string sql = @" select categoryname as name, count(*) as count from lists group by categoryname";
ds = GetData(sql); lists = new List<object>();
foreach (DataRow dr in ds.Tables[].Rows)
{
var obj = new { name = dr["name"], value = dr["count"] };
lists.Add(obj);
} jsS = new JavaScriptSerializer();
result = jsS.Serialize(lists);
context.Response.Write(result); } public DataSet GetData(string sql)
{
ds = new DataSet();
da = new SqlCeDataAdapter(sql, con);
da.Fill(ds);
return ds; }
在上面代码里,使用了
jsS = new JavaScriptSerializer();
用于把数据序列号为JSON。
这样如果浏览handler.ashx,通过传递cmd不同的参数,就可以返回不同的JSON数据

(4)生成pie报表(饼形图)
echarts需要一个容器来存放数据,通常,会是一个div,所以,我们定义一个div
<div id="echart" style="width:100%; height:400px;"></div>
我们需要在JQuery的ready事件里,调用数据库数据,并在回调函数里,调用DrawPie生产饼形图。
DrawPie第一个参数是回调值,第二个参数是div的id。
ajax的async设置为false是因为需要同步调用。
<script type="text/javascript">
$(document).ready(
function () { $.ajax({
url: "ajax/Handler.ashx",
data:{cmd:"pie"},
cache: false,
async: false,
dataType: 'json', success: function (data) {
if (data) {
DrawPie(data,"echart");
}
}, error: function (msg) {
alert("系统发生错误");
} }); }); </script>
这样,就完成了pie报表的生成。
(5)生成bar图形(柱状图)
要生成bar图像,只要修改2处即可:(1)ajax传递参数cmd为bar。(2)回调返回DrawBar。
<div id="echart" style="width:100%; height:400px;"></div>
<script type="text/javascript">
$(document).ready(
function () {
$.ajax({
url: "ajax/Handler.ashx",
data: { cmd: "bar" },
cache: false,
async: false,
dataType: 'json',
success: function (data) {
if (data) {
DrawBar(data, "echart");
}
},
error: function (msg) {
alert("系统发生错误");
}
});
});
</script>
(6)运行效果
你可以下载源代码,运行看到效果(一个是bar.aspx页面,一个是pie.aspx页面)

(7)后续
到此已经完成了图形设计,通过调用DrawBar或者DrawPie方法,就可以生产了报表,你可以进一步对其进行包装为用户控件,方便使用
(8)源代码
单击此处下载本文源代码
http://files.cnblogs.com/files/mqingqing123/echartsDemo.rar
利用c#+jquery+echarts生成统计报表(附源代码)的更多相关文章
- C# 根据天、周、月汇总统计生成统计报表
先看核心代码: public List<DataEntity> SearchShopSalesReport(DateTimeOffset? dateFrom, DateTimeOffset ...
- Python_汇总生成统计报表
import xlrd import xlwt from xlutils.copy import copy objWb = xlrd.open_workbook(r'C:\Users\IBM\Desk ...
- echarts 数据统计报表
官网 http://echarts.baidu.com/index.html 我们下载好开发包后就可以开始了,第一步引入开发包,和需要的主题文件(可定义自己的主体文件),并定义好页面布局.2.0以 ...
- jquery ztree的案例,附源代码
播客:http://itindex.net/detail/46094-jquery-ztree-%E7%A8%8B%E5%BA%8F 源代码: http://download.csdn.net/d ...
- statpot:使用mongo+bootstrap+highcharts做统计报表
最近做了一个统计项目,这个统计项目大致的需求是统计接口的访问速度.客户端会调用一个接口来记录接口的访问情况,我的需求就需要分析这些数据,然后做出个统计报表. 需求实现 最初的时候想着每天把这些接口访问 ...
- 利用FusionCharts制作统计报表
今天在开发中需要用到统计报表,于是就查找了一下FusionCharts的用法,下面来总结一下利用FusionCharts怎么制作统计报表 1.建表 首先要建立所要统计报表的表,表的字段越多,统计的维度 ...
- 移动端不利用HTML5和echarts开发一样可以实现大数据展示及炫酷统计系统(产品技术综合)
一.由于项目需要进行手机看板展示设计及开发展示效果图如下:
- python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图
python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图 # coding=utf-8 from openpyxl import load_workbook ...
- Echarts生成饼状图、条形图以及线形图 JS封装
1.在我们开发程序中,经常会用到生成一些报表,比方说饼状图,条形图,折线图等.不多说了,直接上封装好的代码,如下Echarts.js所示 以下代码是封装在Echarts.js文件中 /** * Cre ...
随机推荐
- 20169211 《Linux内核原理与分析》第十一周作业
SET-UID程序漏洞实验 一.实验简介 Set-UID 是Unix系统中的一个重要的安全机制.当一个Set-UID程序运行的时候,它被假设为具有拥有者的权限.例如,如果程序的拥有者是root,那么任 ...
- 20169211《Linux内核原理与分析》 第九周作业
一.Linux内核虚拟文件系统学习总结 Linux支持各种文件系统,Linux内核通过虚拟文件系统了对各种文件系统共性的进行抽象,并对外提供统一接口,从面向对象编程的角度来看,称为抽象文件系统更为合适 ...
- URL的组成
饮水思源 http://blog.csdn.net/ergouge/article/details/8185219 http://www.cnblogs.com/kaituorensheng/p/37 ...
- iOS Sprite Kit教程之滚动场景
iOS Sprite Kit教程之滚动场景 滚动场景 在很多的游戏中,场景都不是静止的,而是滚动的,如在植物大战僵尸的游戏中,它的场景如图2.26所示. 图2.26 植物大战僵尸 在图2.26中,用 ...
- luoguP4491 [HAOI2018]染色 广义容斥原理 + FFT
非常明显的摆了一个NTT模数.... 题目中求恰好\(k\),那么考虑求至少\(k\) 记\(g(k)\)表示至少\(k\)中颜色出现了恰好\(S\)次 那么,\[g(k) = \binom{M}{k ...
- BZOJ.2527.[POI2011]MET-Meteors(整体二分)
题目链接 BZOJ 洛谷 每个国家的答案可以二分+求前缀和,于是可以想到整体二分. 在每次Solve()中要更新所有国家得到的值,不同位置的空间站对应不同国家比较麻烦. 注意到每次Solve()其国家 ...
- VMWare虚拟机下CentOS 配置网络实现远程连接,提供Web访问
最近使用VMWARE虚拟机当中redhat操作系统,感觉直接使用很不方便,于是就决定配置下redhat网络,通过本机远程工具SecureCRT来连接redhat使用. 环境说明:本机操 ...
- IDEA JSP项目构建及学习心得
近期学习的东西比较杂乱,导致了很多东西都有些忘却.在这里记录一份心得. 简而言之JSP也就是Java代码在页面上的一种呈现方式,用于Web项目的前台展示. 在这里不做过多的阐述. MVC设计模式,Se ...
- Codeforces Round #360 (Div. 1) D. Dividing Kingdom II 暴力并查集
D. Dividing Kingdom II 题目连接: http://www.codeforces.com/contest/687/problem/D Description Long time a ...
- Codeforces Beta Round #37 A. Towers 水题
A. Towers 题目连接: http://www.codeforces.com/contest/37/problem/A Description Little Vasya has received ...