썸네일:
코드는 다음과 같습니다.
시스템 사용;
System.Web 사용;
System.Web.UI 사용;
System.Web.UI.WebControls 사용;
System.Data 사용;
System.Data.SqlClient 사용;
System.Drawing 사용;
System.Drawing.Imaging 사용;
System.Drawing.Drawing2D 사용;
/// <요약>
///
/// </요약>
namespace WebApplication1
{ /// <summary> /// WebForm1 요약 설명. /// </summary> public class WebForm1 : System.Web.UI.Page { public int PicWidth; //그림 길이 public int PicHeight = 640; //그림 너비 public int IntializeX = 0; //X축 0 스케일 값 public double IntializeY = 0.00; //Y축의 0 스케일 값 public int XScale = 40; //스케일 X의 길이 public int YScale = 40; //스케일의 높이 public string strXText = " 시간(단위: 일)" ; //단위 X
public string strYText = "성장률"; //단위 Y
public string strTitle = "2010년 양수(1) 순자산 증가율 변화 차트" //제목
public DataTable Mydt; //계산할 데이터
public int DataCounts = 0; //레코드 수
public int Xkedu=5;
private void Page_Load(object sender, System.EventArgs e)
{ DB db = new DB(); SqlConnection conn = db.SqlConn(); String strSelect="select * from product where ProductID= 1771"; SqlDataAdapter ds=new SqlDataAdapter(strSelect,conn); DataTable st=new DataTable(); ds.Fill(st); string startTime; if(st.Rows[0]["DateStart"].ToString( )=="")
{ string SQL="제품 ID가 1771인 NetValue에서 상위 1개 선택 * NetValueID Asc로 주문"; SqlDataAdapter ss=new SqlDataAdapter(SQL,conn); DataTable yxDT=새 DataTable(); ss.Fill(yxDT); startTime=yxDT.Rows[0]["Logdate"].ToString(); } else { startTime=st.Rows[0]["Logdate"].ToString(); } //开始时间 DateTime dtstart=Convert.ToDateTime(startTime);
//종료시간
문자열 yxEndTime;
string SQL1="제품 ID가 1771인 NetValue에서 상위 1개 선택 * NetValueID desc별 주문";
SqlDataAdapter ss1=새 SqlDataAdapter(SQL1,conn);
DataTable yxDT1=새 DataTable();
ss1.Fill(yxDT1);
yxEndTime=yxDT1.Rows[0]["로그 날짜"].ToString();
DateTime dtEnd=Convert.ToDateTime(yxEndTime);
TimeSpan tsyx=dtEnd.Subtract(dtstart);
int allDays=tsyx.일;
PicWidth=allDays * Xkedu + 40;
if(dtstart>=dtEnd)
{ Response.Write("<script>alert('종료 날짜는 시작 날짜보다 이후여야 합니다. 다시 선택하십시오.');window.location.href='DrawImage.aspx';</ script>") ; } else { //string SQL = "제품 ID=1771인 NetValue에서 * 선택 LogDate Asc로 주문"; String SQL=String.Format("productID=1771인 NetValue에서 * 선택 및 '{0 사이의 Logdate }' 및 '{1}'",dtstart,dtEnd); SqlDataAdapter sda = new SqlDataAdapter(SQL, conn); DataTable dt = new DataTable(); sda.Fill(dt); DataCounts = dt.Rows.Count; / /캔버스 비트맵 만들기 img = new Bitmap(PicWidth, PicHeight); Graphics gh = Graphics.FromImage(img); gh.Clear(Color.Snow);
//테이블 제목, 날짜 단위, 성장률 단위를 그립니다.
Point pTitle = new Point(0, 10);
Font Ftitle = new Font("Black body", 16);
SolidBrush sbTitle = new SolidBrush(Color.Blue);
gh. DrawString(strTitle, Ftitle, sbTitle, pTitle);
Font Fcommon = new Font("黑体", 10);
gh.DrawString(strXText, Fcommon, sbTitle, new Point(50, 40));
gh.DrawLine(new Pen(Color.Blue, 1), new Point(140) , 48), new Point(50, 80));
gh.DrawString(strYText, Fcommon, sbTitle, new Point(90, 70));
//Y주의 양수 부분 그리기
Point XZstart = new Point(40, 160);
포인트 YZstart = new Point(40, 20);
Pen p = new Pen(Color.Blue, 1);
p.DashStyle = DashStyle.Solid;
p.EndCap = LineCap.ArrowAnchor;
gh.DrawLine(p, XZstart , YZstart) ;
//Y 주의 마이너스 부분을 그립니다.
Point XFstart = new Point(40, 160);
Point YFstart = new Point(40, PicHeight);
gh.DrawLine(p, XFstart, YFstart);
//그리기 X축
Point Xstart = new Point(40, 160);
Point Xend = new Point(PicWidth, 160);
gh.DrawLine(p, Xstart, Xend);
//Y 축에 스케일 추가
int YkeduStartX = 40;
int YkeduStartY = 40 ;
int HeightScore = 3;
for (int i = 1; i < 16; i++)
{ // 스케일 시작점 Point KeduYX = new Point(YkeduStartX, YkeduStartY); Point KeduYY = new Point(YkeduStartX + 2, YkeduStartY); Pen pn = new Pen(Color.Blue, 1); gh.DrawLine(pn, KeduYX, KeduYY); //브러시 SolidBrush 정의 sb = new SolidBrush(Color.Blue); // 옆에 해당 상승 및 하강 값 문자열 추가 스케일 플래그 = HeightScore.ToString() + "%";
gh.DrawString(flag, new Font("黑体", 10), sb, new Point(8, YkeduStartY - 5));
YkeduStartX = YkeduStartX + 0;
YkeduStartY = YkeduStartY + 40;
HeightScore = HeightScore - 1;
}
//Format 개체를 정의하고 텍스트를 수직으로 설정
System.Drawing.StringFormat sf = new System.Drawing.StringFormat();
sf.FormatFlags = StringFormatFlags.DirectionVertical;
//X축에 스케일 추가
int XkeduStartX = 40;
int XkeduStartY = 160;
DateTime DateDT = dtstart;
while(DateDT<=dtEnd)
{ Point KeduXX = new Point(XkeduStartX, XkeduStartY); Point KeduXy = new Point(XkeduStartX, XkeduStartY - 3); Pen pn = new Pen(Color.Blue, 1); gh.DrawLine(pn , KeduXX, KeduXy); //눈금의 날짜를 그립니다. 날짜 간격은 일주일입니다. string strDate = string.Format("{0:yyyy-MM-dd}", DateDT); SolidBrush sb = new SolidBrush(Color .Blue); 글꼴 글꼴 = new Font("黑体", 9); Point pWeeks = new Point(XkeduStartX-12, XkeduStartY + 15); gh.DrawString(strDate, font, sb, pWeeks, sf); XkeduStartX = XkeduStartX + Xkedu*7 ; XkeduStartY = XkeduStartY + 0; DateDT = DateDT.AddDays(7); }
//14개 그리드, 그리드당 40픽셀, 각 그리드는 1을 나타냅니다.
//증가율을 1%로 나누어 비율을 얻은 다음 40을 곱하여 수직 좌표를 얻습니다.
//각 레코드에 대해 양의 방향에 8픽셀을 더합니다. X 축의
//초기화 포인트 정의
float X = 40.0f;
float Y = 160.0f;
//초기화 새 포인트 정의
float NewX;
float NewY;
//그리기 순환 // 하나
위해 마지막 하나 저장
설정하기 색상을
덜 NetGrowth = NetGrowth.Replace("%", ""); double Temp = Convert.ToDouble(NetGrowth), float Num = (float)Temp / 100, float Percent = Num / 0.01f;
//初始化点B
if (Percent < 0)
{ //NewX = X + 8; // 计算X坐标 DateTime dtYx=Convert.ToDateTime(dt.Rows[i]["Logdate"]); TimeSpan ts=dtYx.Subtract(dtstart); int Days=ts.Days; NewX=40+일*Xkedu; NewY = 160.0f - 퍼센트 * 40; } 그렇지 않으면 (백분율 > 0) { //NewX = X + 8; // 计算X坐标 DateTime dtYx=Convert.ToDateTime(dt.Rows[i]["Logdate"]); TimeSpan ts=dtYx.Subtract(dtstart); int Days=ts.Days; NewX=40+일*Xkedu; NewY = 160.0f - 퍼센트 * 40; } 다른
{ //NewX = X + 0; // 计算X坐标 DateTime dtYx=Convert.ToDateTime(dt.Rows[i]["Logdate"]); TimeSpan ts=dtYx.Subtract(dtstart); int Days=ts.Days; NewX=40+일*Xkedu; NewY = 160.0f - 퍼센트 * 40; }
//绘制直线
//System.Drawing.ColorTranslator.FromHtml("#ffffff")
if (i == DataCounts - 1)
{ if (Percent > 0) { Pen ZZLp = new Pen(Color.Green, 2); ZZLp.DashStyle = DashStyle.Solid; ZZLp.EndCap = LineCap.RoundAnchor; gh.DrawLine(ZZLp, X, Y, NewX, NewY); } else { Pen ZZLp = new Pen(Color.Red, 2); ZZLp.DashStyle = DashStyle.Solid; ZZLp.EndCap = LineCap.RoundAnchor; gh.DrawLine(ZZLp, X, Y, NewX, NewY); } } 다른 {
Pen ZZLp = new Pen(Color.Blue, 2);
ZZLp.DashStyle = DashStyle.Solid;
ZZLp.EndCap = LineCap.RoundAnchor;
gh.DrawLine(ZZLp, X, Y, NewX, NewY);
}
//새 점을 다음 드로잉 라인의 시작점으로 저장
X = NewX;
Y = NewY;
}
//출력 이미지
//img.Save(Response.OutputStream, ImageFormat.Jpeg);
img.Save(Server.MapPath("images/Pic.jpg"), ImageFormat.Jpeg);
gh.Dispose();
img.Dispose ();
//Response.Write("<script>alert('순자산 증가율 차트가 성공적으로 생성되었습니다. 웹사이트 프런트 데스크의 금융 센터에서 찾아보세요!');</script>");
}
}
#region Web Forms Designer 생성 코드
재정의 protected void OnInit(EventArgs e)
{ // // CODEGEN: 이 호출은 ASP.NET Web Forms Designer에 필요합니다. // InitializeComponent(); base.OnInit(e); } /// <summary> /// 디자이너 지원에 필요한 메서드 - 코드 편집기를 사용하여 /// 이 메서드의 내용을 수정하지 마십시오 . /// </summary> private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}