这里是从Dataset里的数据生成曲线图
我的Dataset是从表Sendrec里读取的数据分别有IdSendid(订单号)Sendtime(记录时间)Sendnum(单位时间发送量/我这里是五分钟)几个字段
过程如下:
public void draw(Page pageDataSet dsint Tnum){}
其中page是用来传递引用这个过程的页面这样让页面是JPG方式直接向客户端输出生成的曲线图
ds就是取出来的数据集了
Tnum只是我这里要用到的一个参数不想让这个类去接触读取过程所以把订单的总量直接取出后传递给它的
using System;
using SystemData;
using SystemConfiguration;
using SystemWeb;
using SystemWebSecurity;
using SystemWebUI;
using SystemWebUIWebControls;
using SystemWebUIHtmlControls;
using SystemDrawingDrawingD;
using SystemDrawingImaging;
using SystemDrawing;
using SystemIO;
public class imgdraw
{
public imgdraw()
{
}
public void draw(Page pageDataSet dsint Tnum)
{
//取得记录数量
int count = dsTables[]RowsCount;
//记算图表宽度
int wd = + * (count );
//设置最小宽度为
if (wd < ) wd = ;
//生成Bitmap对像
Bitmap img=new Bitmap(wd);
//生成绘图对像
Graphics g = GraphicsFromImage(img);
//定义黑色画笔
Pen Bp = new Pen(ColorBlack);
//定义红色画笔
Pen Rp = new Pen(ColorRed);
//定义银灰色画笔
Pen Sp = new Pen(ColorSilver);
//定义大标题字体
Font Bfont = new Font(Arial FontStyleBold);
//定义一般字体
Font font = new Font(Arial );
//定义大点的字体
Font Tfont = new Font(Arial );
//绘制底色
gDrawRectangle(new Pen(ColorWhite ) imgWidth imgHeight);
//定义黑色过渡型笔刷
LinearGradientBrush brush = new LinearGradientBrush(new Rectangle( imgWidth imgHeight) ColorBlack ColorBlack F true);
//定义蓝色过渡型笔刷
LinearGradientBrush Bluebrush = new LinearGradientBrush(new Rectangle( imgWidth imgHeight) ColorBlue ColorBlue F true);
//绘制大标题
gDrawString(dsTables[]Rows[][sendid]ToString() + 号订单发送情况曲线图 Bfont brush );
//取得当前发送量
int nums=;
for (int i = ; i < count; i++)
{
nums+=ConvertToInt(dsTables[]Rows[i][sendnum]);
}
//绘制信息简报
string info=订单发送时间+dsTables[]Rows[][sendtime]ToString()+ 曲线图生成时间+DateTimeNowToString()+ 订单总量+TnumToString()+ 当前发送总量+numsToString();
gDrawString(info Tfont Bluebrush );
//绘制图片边框
gDrawRectangle(Bp imgWidth imgHeight );
//绘制竖坐标线
for (int i = ; i < count; i++)
{
gDrawLine(Sp + * i + * i );
}
//绘制时间轴坐标标签
for (int i = ; i < count; i+=)
{
string st = ConvertToDateTime(dsTables[]Rows[i][sendtime])ToString(hh:mm);
gDrawString(st font brush + * i );
}
//绘制横坐标线
for (int i = ; i < ; i++)
{
gDrawLine(Sp +*i +*(count) +*i);
int s = * i * ;
//绘制发送量轴坐标标签
gDrawString(sToString() font brush + * i);
}
//绘制竖坐标轴
gDrawLine(Bp );
//绘制横坐标轴
gDrawLine(Bp + * (count ) );
//定义曲线转折点
Point[] p = new Point[count];
for (int i = ; i < count; i++)
{
p[i]X = + * i;
p[i]Y = ConvertToInt(dsTables[]Rows[i][sendnum]) / */;
}
//绘制发送曲线
gDrawLines(Rp p);
for (int i = ; i < count; i++)
{
//绘制发送记录点的发送量
gDrawString(dsTables[]Rows[i][sendnum]ToString() font Bluebrush p[i]X p[i]Y );
//绘制发送记录点
gDrawRectangle(Rp p[i]X p[i]Y );
}
//绘制竖坐标标题
gDrawString(发送量 Tfont brush );
//绘制横坐标标题
gDrawString(发送时间 Tfont brush );
//保存绘制的图片
MemoryStream stream = new MemoryStream();
imgSave(stream ImageFormatJpeg);
//图片输出
pageResponseClear();
pageResponseContentType = image/jpeg;
pageResponseBinaryWrite(streamToArray());
}
}
嘿嘿!发表这个就是一个图片的绘制方法的记录了这里面还有很多不当之久望指教