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.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Web.SessionState;
using System.Drawing.Imaging;
using System.Data.OleDb;
publicpartialclass TGtuCon : System.Web.UI.Page
{
publicvoid Page_Load(object sender, EventArgs e)
{
System.Drawing.Bitmap image =new System.Drawing.Bitmap(1024,800);
Graphics g = Graphics.FromImage(image);
try
{
// 公司1 01/01~02/28
// 公司2 02/01~03/21
// 公司3 01/13~02/02 02/12~03/04
int hang =20;// 行距
int shu =100;
// 最大日期,最小日期
string maxdate ="2009-03-04", mindate ="2009-01-01";
//清空图片背景色
g.Clear(Color.Snow);
//在绘画图面的指定位置,以指定的字体、指定的颜色绘制指定的字符串。
g.DrawString("××公司甘特图",new Font("黑体",14), Brushes.Black, new Point(5,5));
//定点
Point myRec=new Point(10,70); Point myDec =new Point(10+ shu, 40);
// 竖列字
g.DrawString("公司1",new Font("黑体",10), Brushes.Black, myRec.X, myRec.Y);
g.DrawString("公司2",new Font("黑体",10), Brushes.Black, myRec.X, myRec.Y + hang);
g.DrawString("公司3",new Font("黑体",10), Brushes.Black, myRec.X, myRec.Y + hang *2);
// 横列标题
int x =0, nextX = myDec.X; string nextdate = mindate;
for(int i=1;i<5;i++)
{
g.DrawString(i.ToString() +"月",new Font("黑体",10), Brushes.Black, nextX + x, myDec.Y);
nextX = nextX + x;
TimeSpan ts =new TimeSpan(); ts = Convert.ToDateTime(nextdate).AddMonths(1)- Convert.ToDateTime(nextdate);
x = Convert.ToInt32 (ts.Days) *10;
nextdate = Convert.ToDateTime(nextdate).AddMonths(1).ToString() ;
}
// 公司1 01/01~02/28
int width=0,startx=0;TimeSpan tspan =new TimeSpan();
tspan = Convert.ToDateTime("2009-02-28")- Convert.ToDateTime(mindate);
width = Convert.ToInt32 (tspan.Days) *10;
g.DrawRectangle(Pens.Black, myDec.X+startx , myRec.Y, width, 10);//绘制Bar图
g.FillRectangle(new SolidBrush(GetColor(0)), myDec.X+startx , myRec.Y, width, 10);//以指定的色彩填充Bar图
g.DrawString("01/01~02/28",new Font("黑体",10), Brushes.Black, myDec.X + startx, myRec.Y);
// 公司2 02/01~03/21
tspan= Convert.ToDateTime("2009-02-01")- Convert.ToDateTime(mindate);
startx = Convert.ToInt32(tspan.Days) *10;
tspan = Convert.ToDateTime("2009-03-21")- Convert.ToDateTime(mindate);
width = Convert.ToInt32(tspan.Days) *10- startx;
g.DrawRectangle(Pens.Black, myDec.X + startx, myRec.Y + hang, width, 10);//绘制Bar图
g.FillRectangle(new SolidBrush(GetColor(1)), myDec.X + startx, myRec.Y + hang, width, 10);//以指定的色彩填充Bar图
g.DrawString("02/01~03/21",new Font("黑体",10), Brushes.Black, myDec.X + startx, myRec.Y + hang);
// 公司3 01/13~02/02 02/12~03/04
tspan= Convert.ToDateTime("2009-01-13")- Convert.ToDateTime(mindate);
startx = Convert.ToInt32(tspan.Days) *10;
tspan = Convert.ToDateTime("2009-02-02")- Convert.ToDateTime(mindate);
width = Convert.ToInt32(tspan.Days) *10- startx;
g.DrawRectangle(Pens.Black, myDec.X + startx, myRec.Y + hang*2, width, 10);//绘制Bar图
g.FillRectangle(new SolidBrush(GetColor(2)), myDec.X + startx, myRec.Y + hang *2, width, 10);//以指定的色彩填充Bar图
g.DrawString("01/13~02/02",new Font("黑体",10), Brushes.Black, myDec.X + startx, myRec.Y + hang *2);
tspan = Convert.ToDateTime("2009-02-12")- Convert.ToDateTime(mindate);
startx = Convert.ToInt32(tspan.Days) *10;
tspan = Convert.ToDateTime("2009-03-04")- Convert.ToDateTime(mindate);
width = Convert.ToInt32(tspan.Days) *10- startx;
g.DrawRectangle(Pens.Black, myDec.X + startx, myRec.Y + hang *2, width, 10);//绘制Bar图
g.FillRectangle(new SolidBrush(GetColor(2)), myDec.X + startx, myRec.Y + hang *2, width, 10);//以指定的色彩填充Bar图
g.DrawString("02/12~03/04",new Font("黑体",10), Brushes.Black, myDec.X + startx, myRec.Y + hang *2);
//画图片的边框线
g.DrawRectangle(new Pen(Color.Red), 0,0, image.Width -1, image.Height -1);
System.IO.MemoryStream ms =new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
Response.ContentType ="image/Gif";
Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
}
///<summary>
/// 获取颜色
///</summary>
///<param name="itemIndex">数组的索引</param>
///<returns></returns>
private Color GetColor(int itemIndex)
{
Color myColor;
int i = itemIndex;
switch (i)
{
case0:
myColor = Color.LightGreen ;
return myColor;
case1:
myColor = Color.Pink ;
return myColor;
case2:
myColor = Color.LightYellow;
return myColor;
case3:
myColor = Color.LightBlue;
return myColor;
case4:
myColor = Color.Orange;
return myColor;
case5:
myColor = Color.Aqua;
return myColor;
case6:
myColor = Color.SkyBlue;
return myColor;
case7:
myColor = Color.DeepPink;
return myColor;
case8:
myColor = Color.Azure;
return myColor;
case9:
myColor = Color.Brown;
return myColor;
case10:
myColor = Color.Pink;
return myColor;
case11:
myColor = Color.BurlyWood;
return myColor;
case12:
myColor = Color.Chartreuse;
return myColor;
default:
myColor = Color.Pink;
return myColor;
}
}
}
GDI 画 WEB上的甘特图
最新推荐文章于 2024-02-21 11:54:52 发布