GDI 画 WEB上的甘特图

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;
}
}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值