求救,我有这个需求:
要求画个图个统计图数据库里面的数据成正比,
如(数据的数目是10,我查询的是条件是3和5,那结果就是3/10,1/2),然后用个条型图显示出来,请问谁有代码?谢谢

解决方案 »

  1.   

    你参考一下#region
    /// <summary>
    /// 画图
    /// </summary>
    public void PK()
    {
    // int[] xl={12,7,5,21,29,17,23,19,20,15,11,18};
    // string[] m={"1","2","3","4","5","6","7","8","9","10","11","12"};
    DataTable dt=new DataTable();
    dt=fun.select("select sum(Profit),day([date]) from Crm_bill Group by day([date]) Order by day([date])").Tables[0];
    ArrayList a=new ArrayList();
    ArrayList b=new ArrayList();
    if(dt.Rows.Count>0)
    {
    for(int i=0;i<dt.Rows.Count;i++)
    {
    a.Add(Convert.ToInt32(dt.Rows[i][0].ToString().Trim()));
    b.Add(dt.Rows[i][1].ToString().Trim()+"日");
    // a[i]=Convert.ToInt32(dt.Rows[i][0].ToString().Trim());
    // b[i]=dt.Rows[i][1].ToString().Trim()+"日";
    }
    }

    Bitmap img=new Bitmap(700,600);
    Graphics g=Graphics.FromImage(img);
    g.Clear(Color.Snow);
    g.DrawString("业绩曲线",new Font("楷书",16),Brushes.Black,new Point(5,5));
    g.DrawLine(new Pen(Color.Red,2),50,500,60+a.Count*40,500);//横
    g.DrawLine(new Pen(Color.Red,2),50,50,50,500);
    // g.DrawRectangle(new Pen(Color.Brown,3),100,100,400,200);
    // g.DrawLine(new Pen(Color.Black,20),new Point(150,150),new Point(150,400));
    // g.DrawLine(new Pen(Color.Red,2),50,350,800,350);
    // g.DrawLine(new Pen(Color.Red,2),50,30,350,350);
    Point p1=new Point(50,500); for(int j=0;j<=20;j++)
    {
    p1.Y=500-j*20;
    g.DrawLine(Pens.Red,p1,new Point(p1.X+5,p1.Y));
    g.DrawString(Convert.ToString(j*2000),new Font("宋体",12),Brushes.Black,new Point(p1.X-45,p1.Y-8)); Point pa=new Point(49,50);
    Point pb=new Point(45,60);
    Point pc=new Point(55,60);
    g.DrawLine(new Pen(Color.Red,2),pa,pb);
    g.DrawLine(new Pen(Color.Red,2),pa,pc);
    g.DrawString("(单位:元)",new Font("宋体",10),Brushes.Black,60,60);
    // g.DrawLine(new Pens(Color.Red,1),pa,pb);
    // g.DrawLine(new Pens(Color.Red,1),pa,pc);// Point[] pp={pa,pb,pc};
    // g.DrawPolygon(new Pen(Color.Red,3),pp);
    }
    for(int i=0;i<a.Count;i++)
    {
    Point p=new Point(55+i*40,500);
    // g.DrawLine(Pens.Red,p,new Point(p.X,p.Y-5));
    g.DrawString(b[i].ToString(),new Font("宋体",10),Brushes.Black,p);
    // p.X+=35;
    }
    Point pq=new Point(60+a.Count*40,500);
    Point pw=new Point(55+a.Count*40,495);
    Point pe=new Point(55+a.Count*40,505);
    g.DrawLine(new Pen(Color.Red,2),pq,pw);
    g.DrawLine(new Pen(Color.Red,2),pq,pe);
    // g.DrawString("(单位:元)",new Font("宋体",10),Brushes.Black,60,60); for(int i=0;i<a.Count-1;i++)
    {
    // int aa=Convert.ToInt32(a[i]);
    // Point rec=new Point(50+i*35,aa/100+200);
    // Point dec=new Point(50+(i+1)*35,Convert.ToInt32(a[i+1])/100+200);
    // g.DrawLine(new Pen(Color.Black),rec,dec);
    // g.DrawString(a[i].ToString(),new Font("宋体",8),Brushes.Blue,rec);
    Point rec=new Point(70+i*40,500);
    Point dec=new Point(70+i*40,500-Convert.ToInt32(a[i])/100);
    g.DrawLine(new Pen(Color.Red,25),rec,dec);
    g.DrawString(a[i].ToString(),new Font("宋体",10),Brushes.Blue,new Point(55+i*40,480-Convert.ToInt32(a[i])/100));
    }
    img.Save(Response.OutputStream,ImageFormat.Jpeg);
    img.Dispose();
    g.Dispose();
    }
    #endregion