1,首先需要添加引用ChartExtents.dll和donetCHARTING.dll,资源百度大把。

2,配置图片生成类。

 using System;
using System.Data;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Web;
using dotnetCHARTING; namespace ting.Models.BLL
{
public class Charting
{
private string _phaysicalimagepath;//图片存放路径
private string _title; //图片标题
private string _xtitle;//图片x座标名称
private string _ytitle;//图片y座标名称
private string _seriesname;//图例名称
private int _picwidth;//图片宽度
private int _pichight;//图片高度
private SeriesType _type;//统计图类型(柱形,线形等)
private bool _use3d;//是否显示成3维图片
private SeriesCollection _dt;//统计图数据源
private string _filename;//统计图片的名称(不包括后缀名) /**/
/// <summary>
/// 图片存放路径
/// </summary>
public string PhaysicalImagePath
{
set { _phaysicalimagepath = value; }
get { return _phaysicalimagepath; }
}
/**/
/// <summary>
/// 图片标题
/// </summary>
public string Title
{
set { _title = value; }
get { return _title; }
}
/**/
/// <summary>
/// 图片x座标名称
/// </summary>
public string XTitle
{
set { _xtitle = value; }
get { return _xtitle; }
}
/**/
/// <summary>
/// 图片y座标名称
/// </summary>
public string YTitle
{
set { _ytitle = value; }
get { return _ytitle; }
} /**/
/// <summary>
/// 图例名称
/// </summary>
public string SeriesName
{
set { _seriesname = value; }
get { return _seriesname; }
}
/**/
/// <summary>
/// 图片宽度
/// </summary>
public int PicWidth
{
set { _picwidth = value; }
get { return _picwidth; }
}
/**/
/// <summary>
/// 图片高度
/// </summary>
public int PicHight
{
set { _pichight = value; }
get { return _pichight; }
} /// <summary>
/// 统计图类型(柱形,线形等)
/// </summary>
public SeriesType Type
{
set { _type = value; }
get { return _type; }
} /// <summary>
/// 是否将输出的图片显示成三维
/// </summary>
public bool Use3D
{
set { _use3d = value; }
get { return _use3d; }
} /// <summary>
/// 对比图形数据源
/// </summary>
public SeriesCollection DataSource
{ set { _dt = value; }
get { return _dt; }
} /// <summary>
/// 生成统计图片的名称
/// </summary>
public string FileName
{
set { _filename = value; }
get { return _filename; }
} /// <summary>
/// 生成统计图片
/// </summary>
/// <param name="chart"></param>
/// <param name="type">图形类别,如柱状,折线型</param>
public void CreateStatisticPic(dotnetCHARTING.Chart chart)
{
chart.Title = this.Title;
chart.XAxis.Label.Text = this.XTitle;
chart.YAxis.Label.Text = this.YTitle;
chart.TempDirectory = this.PhaysicalImagePath;
chart.FileManager.FileName = this.FileName;
chart.Width = this.PicWidth;
chart.Height = this.PicHight;
chart.Type = ChartType.Combo;
chart.DefaultSeries.Type = this.Type; //统一使用默认的序列图类型属性
chart.Series.Name = this.SeriesName;
chart.SeriesCollection.Add(this.DataSource);
chart.DefaultSeries.DefaultElement.ShowValue = true;
chart.ShadingEffect = true;
chart.Use3D = this.Use3D;
chart.Series.DefaultElement.ShowValue = true;
}
}
}

3,新建一个ASP.NET页面,前台代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Statistics.aspx.cs" Inherits="ting.Views.Statistics" %>
<%@ Register Assembly="dotnetCHARTING" Namespace="dotnetCHARTING" TagPrefix="dotnetCHARTING" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<dotnetCHARTING:Chart ID="Chart1" runat="server">
</dotnetCHARTING:Chart>
</div>
<p>
请选择报表类型:<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"
OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
</asp:DropDownList>
</p> </form>
</body>
</html>
<script type="text/javascript">
var obj = document.getElementsByTagName("map")[];
obj.parentNode.removeChild(obj); //屏蔽隐藏的链接
</script>

后台代码如下:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Drawing;
using dotnetCHARTING;
using ting.Models.BLL; namespace ting.Views
{
public partial class Statistics : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Drawing("Bar"); DropDownList1.Items.Add(new ListItem("AreaLine", "AreaLine"));
DropDownList1.Items.Add(new ListItem("Bar", "Bar"));
DropDownList1.Items.Add(new ListItem("Column", "Column"));
DropDownList1.Items.Add(new ListItem("Cylinder", "Cylinder"));
DropDownList1.Items.Add(new ListItem("Line", "Line"));
DropDownList1.Items.Add(new ListItem("Marker", "Marker"));
DropDownList1.Items.Add(new ListItem("Spline", "Spline"));
}
}
private void Drawing(string type)
{
Charting c = new Charting(); c.Title = "2015年月销售统计图";
c.XTitle = "2015年各月份";
c.YTitle = "销售额(千元)/销售量(束)";
c.PicHight = ;
c.PicWidth = ;
c.SeriesName = "合计";//仅对于DataTable类型做数据源时,此属性有效
c.PhaysicalImagePath = "/images/ChartImages";//统计图片存放的文件夹名称,缺少对应的文件夹生成不了统计图片
c.FileName = "Statistics51aspx";
if (type == "AreaLine")
c.Type = SeriesType.AreaLine;
else if (type == "Bar")
c.Type = SeriesType.Bar;
else if (type == "Column")
c.Type = SeriesType.Column;
else if (type == "Cylinder")
c.Type = SeriesType.Cylinder;
else if (type == "Line")
c.Type = SeriesType.Line;
else if (type == "Marker")
c.Type = SeriesType.Marker;
else
c.Type = SeriesType.Spline; c.Use3D = true; //3D模式
c.DataSource = GetDataSource();
c.CreateStatisticPic(this.Chart1); }
/// <summary>
/// 生成统计图片的数据源模型(单一或对比图都可以)
/// </summary>
/// <returns></returns>
private SeriesCollection GetDataSource()
{
ting.Models.BLL.AdminOPT adopt = new ting.Models.BLL.AdminOPT();
SeriesCollection SC = new SeriesCollection();
Random rd = new Random(); // 生成对比图
for (int a = ; a <= ; a++) //对比的项数,如年各月的月销售额和月利润载客量数据对比就相当于有两个数据项
{
Series s = new Series();
s.Name = (a == ? "月销售额合计(千元)" : "销售量合计(束)");//各个数据项代表的名称,如月销售额和月利润12个月载客量走势图,则一条表示月销售额,一条表示月利润
if (a == )
{
for (int b = ; b <= ; b++) //X轴尺度个数,如12个月表示有12个尺度数
{
Element e = new Element();
e.Name = b.ToString();//对应于X轴个尺度的名称
e.YValue = Convert.ToDouble(adopt.Get_MonthCountMoney(b)/999.00);//与X轴对应的Y轴的数值
s.Elements.Add(e);
}
}
if(a==)
{
for (int b = ; b <= ; b++) //X轴尺度个数,如12个月表示有12个尺度数
{
Element e = new Element();
e.Name = b.ToString();//对应于X轴个尺度的名称
e.YValue = Convert.ToDouble(adopt.Get_MonthCountNum(b));//与X轴对应的Y轴的数值
s.Elements.Add(e);
}
}
SC.Add(s);
}
//可自定义填充图的填充色,系统采取默认分配各数据项的填充色
//SC[0].DefaultElement.Color = Color.Blue;
//SC[1].DefaultElement.Color = Color.Red;
//SC[2].DefaultElement.Color = Color.FromArgb(255, 99, 49);
//SC[3].DefaultElement.Color = Color.FromArgb(0, 156, 255);
return SC;
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
Drawing(DropDownList1.SelectedValue);
}
}
}

解释:我用的是MVC,所以ASP界面我用iframe调出。关键代码都有注释。

分别把销售量和销售额给算出来。首先定义报表类SeriesCollection。

Series 为一个报表汇总。Element顾名思义是报表里的元数据。X轴为月份。Y轴为自定义数据。

<div style="float: left; width: 100%; margin: 0 auto; border: solid 1px #DDDDDD;">
<iframe id="no1" width="700" height="440" scrolling="no" src="../../Statistics.aspx"></iframe>
</div>

效果图如下:

ASP.NET基于donetCHARTING的自动报表的更多相关文章

  1. Unity3.0基于约定的自动注册机制

    前文<Unity2.0容器自动注册机制>中,介绍了如何在 Unity 2.0 版本中使用 Auto Registration 自动注册机制.在 Unity 3.0 版本中(2013年),新 ...

  2. struts基于ognl的自动类型转换需要注意的地方

    好吧,坎坷的过程我就不说了,直接上结论: 在struts2中使用基于ognl的自动类型转换时,Action中的对象属性必须同时添加get/set方法. 例如: 客户端表单: <s:form ac ...

  3. python之excel自动报表

    一.自动报表前期工作: 需要安装XlsxWriter模块,可以从github上下载以后解压.setup.py install. 二.程序: #!/usr/bin/env python # -*- co ...

  4. 模拟登录神器之PHP基于cURL实现自动模拟登录类

    一.构思 从Firefox浏览器拷贝cURL命令(初始页.提交.提交后) 自动分析curl形成模拟登录代码 默认参数:ssl/302/gzip 二.实现 接口 (一)根据curl信息执行并解析结果 p ...

  5. 推荐一款超强大的基于Angularjs的自动完成(Autocomplete)标签及标签组插件–ngTagsInput

    前言 今天利用中午午休时间,给大家分享推荐一款基于Angularjs的自动完成(Autocomplete)标签及标签组插件--ngTagsInput,功能超强大的.不信,你试试就知道^_^... Au ...

  6. ASP.NET MVC 3 loginUrl自动变成Account/Login,并且发生404错误的解决方法

    http://www.cnblogs.com/think8848/archive/2011/07/08/2100814.html ASP.NET MVC 3 loginUrl自动变成Account/L ...

  7. 用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档.

  8. 从ASP.NET传递参数给水晶报表

    原文 http://www.cnblogs.com/insus/p/3281114.html 上次Insus.NET有简单写了一篇文章<Visual Studio 2012使用水晶报表Cryst ...

  9. 在ASP.NET MVC 中使用ActiveReports报表控件

    随着MVC模式的广泛运用,对Web应用系统的开发带来了巨大的影响,我们好像又回到了原来的ASP时代,视乎这是一种后退而不是一种进步,不过MVC模式给我们带来的影响不仅限于我们所看到的这一点..MVC看 ...

随机推荐

  1. sqlite3安装

    SQLite命令行程序(CLP)是开始使用SQLite的最好选择,按照如下步骤获取CLP: 1).打开浏览器进入SQLite主页,www.sqlite.org. 2).单击页面顶部的下载链接(Down ...

  2. 截取NSString字符串

    NSString类中提供了这样三个方法用于获取子字符串: – substringFromIndex: – substringWithRange: – substringToIndex: 具体的使用见下 ...

  3. ural 1297 Palindrome(Manacher模板题)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud 求最长回文子串. http://acm.timus.ru/problem.aspx ...

  4. Windows I/O模型之一:Select模型

    1.概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock) 四种调用模式: 同步:所谓同步,就是在发出一个功能调用时,在没有得到结果 ...

  5. zongjie

    $msg = $_GET['msg'];$startDate = $_POST['startDate'];$endDate = $_POST['endDate'];$quickdate = $_POS ...

  6. C# 加密可逆

    现在一直在做一个小软件,公司的通讯录系统,也没什么功能增删改查,这算是我来这个公司实习的第一件事吧. 在修改个人信息的时候一直对于密码显示这个存在矛盾,不知道应该是要哪种形式去做,后来自己就先用md5 ...

  7. php-app开发接口加密

    自己平时工作中用到的一套接口加密规则,记录下来以后用: /** 2 inc 3 解析接口 客户端接口传输规则: 1.用cmd参数(base64)来动态调用不同的接口,接口地址统一为 http://a. ...

  8. 龙邱STM32单片机用J-LINK下载无法被识别的解决方法

    问题如下: 按照正常步骤使用keil5给龙邱的stm32下载程序,SWD下载方式提示no cortex-m sw device found,JTAG方式提示no cortex-m device fou ...

  9. linux bugfree 安装

    前段时间用了下bugzilla,请参考:linux bugzilla nginx 安装配置 详解,感觉不是很好用.下面说一下,bugfree的安装 bugfree3.0.1是用php的yii框架开发的 ...

  10. mysql 执行reset master 风险

    reset master 会把mysql实例上的所以二进制日志删除,并且日志序列从1开始:这样会引起两个问题. 001.问题一 slave 由于找不到下一个要执行的事件所以会报错.进一步master- ...