当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > asp.net 生成曲线图实现代码

ASP.NET
用 Asp.Net 建立一个在线 RSS 新闻聚合器的方法
关于前台调用后台事件__doPostBack函数
Bin 和 App_Code 文件夹介绍
.NET 2.0 的压缩功能代码
解决Visual Studio 2005 无法显示设计视图的方法
asp.net(c#)两种随机数的算法,可用抽考题
asp.net下url传递中文的解决方案
XmlReader 读取器读取内存流 MemoryStream 的注意事项
asp.net下创建、查询、修改带名称空间的 XML 文件的例子
使用.NET存储XML数据的方法
XslTransform.Transform将结果输出到字符串里的方法
安装 VS2005 SP1 有关问题的解决办法
asp.net下中文验证码,免费开源代码
自定义应用程序配置文件(app.config)
asp.net下使用DIME协议上传文件
动态改变ASP.net页面标题和动态指定页面样式表的方法
WEB上调用HttpWebRequest奇怪问题的解决方法
HTTP协议下用Web Service上传大文件的解决方案
asp.net下Response.ContentType类型汇总
ASP.NET User Control使用技巧一则

ASP.NET 中的 asp.net 生成曲线图实现代码


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 117 ::
收藏到网摘: n/a

这里是从Dataset里的数据生成曲线图. 我的Dataset是从表Sendrec里读取的数据,分别有Id,Sendid(订单号),Sendtime(记录时间),Sendnum(单位时间发送量/我这里是五分钟)几个字段
过程如下:
public void draw(Page page,DataSet ds,int Tnum){}
其中page是用来传递引用这个过程的页面,这样让页面是JPG方式直接向客户端输出生成的曲线图.
ds就是取出来的数据集了
Tnum只是我这里要用到的一个参数,不想让这个类去接触读取过程,所以把订单的总量直接取出后传递给它的.
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Drawing;
using System.IO;
public class imgdraw
{
public imgdraw()
{
}
public void draw(Page page,DataSet ds,int Tnum)
{
//取得记录数量
int count = ds.Tables[0].Rows.Count;
//记算图表宽度
int wd = 80 + 20 * (count - 1);
//设置最小宽度为800
if (wd < 800) wd = 800;
//生成Bitmap对像
Bitmap img=new Bitmap(wd,400);
//生成绘图对像
Graphics g = Graphics.FromImage(img);
//定义黑色画笔
Pen Bp = new Pen(Color.Black);
//定义红色画笔
Pen Rp = new Pen(Color.Red);
//定义银灰色画笔
Pen Sp = new Pen(Color.Silver);
//定义大标题字体
Font Bfont = new Font("Arial", 12, FontStyle.Bold);
//定义一般字体
Font font = new Font("Arial", 6);
//定义大点的字体
Font Tfont = new Font("Arial", 9);
//绘制底色
g.DrawRectangle(new Pen(Color.White, 400), 0, 0, img.Width, img.Height);
//定义黑色过渡型笔刷
LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0,img.Width, img.Height), Color.Black, Color.Black, 1.2F, true);
//定义蓝色过渡型笔刷
LinearGradientBrush Bluebrush = new LinearGradientBrush(newRectangle(0, 0, img.Width, img.Height), Color.Blue, Color.Blue, 1.2F,true);
//绘制大标题
g.DrawString(ds.Tables[0].Rows[0]["sendid"].ToString() + "号订单发送情况曲线图", Bfont, brush, 40, 5);
//取得当前发送量
int nums=0;
for (int i = 0; i < count; i++)
{
nums+=Convert.ToInt32(ds.Tables[0].Rows[i]["sendnum"]);
}
//绘制信息简报
string info="订单发送时间:"+ds.Tables[0].Rows[0]["sendtime"].ToString()+" 曲线图生成时间:"+DateTime.Now.ToString()+" 订单总量:"+Tnum.ToString()+" 当前发送总量:"+nums.ToString();
g.DrawString(info, Tfont, Bluebrush, 40, 25);
//绘制图片边框
g.DrawRectangle(Bp, 0, 0, img.Width - 1, img.Height - 1);
//绘制竖坐标线
for (int i = 0; i < count; i++)
{
g.DrawLine(Sp, 40+20 * i, 60, 40+20 * i, 360);
}
//绘制时间轴坐标标签
for (int i = 0; i < count; i+=2)
{
string st = Convert.ToDateTime(ds.Tables[0].Rows[i]["sendtime"]).ToString("hh:mm");
g.DrawString(st, font, brush, 30 + 20 * i, 370);
}
//绘制横坐标线
for (int i = 0; i < 10; i++)
{
g.DrawLine(Sp, 40, 60+30*i, 40+20*(count-1), 60+30*i);
int s = 2500 - 50 * i * 5;
//绘制发送量轴坐标标签
g.DrawString(s.ToString(), font, brush, 10, 60 + 30 * i);
}
//绘制竖坐标轴
g.DrawLine(Bp, 40, 55, 40, 360);
//绘制横坐标轴
g.DrawLine(Bp, 40, 360, 45 + 20 * (count - 1), 360);
//定义曲线转折点
Point[] p = new Point[count];
for (int i = 0; i < count; i++)
{
p[i].X = 40 + 20 * i;
p[i].Y = 360- Convert.ToInt32(ds.Tables[0].Rows[i]["sendnum"]) / 5*3/5;
}
//绘制发送曲线
g.DrawLines(Rp, p);
for (int i = 0; i < count; i++)
{
//绘制发送记录点的发送量
g.DrawString(ds.Tables[0].Rows[i]["sendnum"].ToString(), font, Bluebrush, p[i].X, p[i].Y - 10);
//绘制发送记录点
g.DrawRectangle(Rp, p[i].X - 1, p[i].Y - 1, 2, 2);
}
//绘制竖坐标标题
g.DrawString("发送量", Tfont, brush, 5, 40);
//绘制横坐标标题
g.DrawString("发送时间", Tfont, brush, 40, 385);
//保存绘制的图片
MemoryStream stream = new MemoryStream();
img.Save(stream, ImageFormat.Jpeg);
//图片输出
page.Response.Clear();
page.Response.C;
page.Response.BinaryWrite(stream.ToArray());
}
}