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. stm32之通用定时器TIM

    STM32系列的CPU,有多达8个定时器: 1.其中TMI1和TIM8是能够产生三对PWM互补输出的高级定时器,常用于三相电机的驱动:它们的时钟有APB2的输出产生: 2.其它6个为普通定时器,时钟由 ...

  2. EffectiveC#2--为你的常量选择readonly而不是const

    1.对于常量,C#里有两个不同的版本: 编译时常量--效率相比更高些,但可维护性不好,保留的目的是为了性能.const关键字申明 public const int _Millennium = 2000 ...

  3. JS数组追加数组采用push.apply的坑(转)

    JS数组追加数组没有现成的函数,这么多年我已经习惯了a.push.apply(a, b);这种自以为很酷的,不需要写for循环的写法,一直也没遇到什么问题,直到今天我要append的b是个很大的数组时 ...

  4. Android 开源框架

    不推荐使用UltimateAndroid.KJFrameForAndroid.ThinkAndroid.Afinal.xUtil等这种集成网络请求.图片加载.数据库ORM.视图依赖注入.UI框架等的集 ...

  5. 高逼格的实现WiFi共享,不安装第三方wifi共享软件,两种方式实现开启wifi的功能

    作为一枚程序员,不会点高逼格的doc命令,那么都有点感觉对不起自己的行业了,好了废话就到这里了   第一种方式: 首先使用cmd命令:window键+R 然后输入cmd回车 第一种方式: 第一步: 设 ...

  6. ios 调用相机后 view 下沉问题

    我只加了一句代码 现在不报错了  因为这个问题是随机性的  我也不太明白这个地方是怎么回事   我只是这样子做了  问题不出来了 if ([[[UIDevice currentDevice] syst ...

  7. mac terminal的使用技巧

    1. 多tab支持    1)terminal y也是支持多tab的, Cmd+T可以打开一个新的tab    2) cmd + shift + { / } 可以在tab间切换   2. termia ...

  8. js序列化json对象

    SerializeJsonToStr : function( oJson ) { if( oJson == null ) return "null"; if( typeof(oJs ...

  9. perl 爬取csdn

    <pre name="code" class="python">use LWP::UserAgent; use POSIX; use HTML::T ...

  10. Zendframework连接两个或多个数据库的实现

    配置文件 <db> <adapter>PDO_MSSQL</adapter> <config> <host>localhost</ho ...