c# 中怎样把datatalble(逻辑表)中的统计数据绘制成饼图?谢谢

解决方案 »

  1.   

    在 com 控件里  microsoft chart controls   控件是用还画统计图的~
    如果没有,只能用画笔画了.
      

  2.   

    推荐ZedGraph,里面有很多例子
      

  3.   

    从oracle数据库中读取每月纪录数,直接代码绘图:
    int[ ] monthCount ={0,0,0,0,0,0,0,0,0,0,0,0};
    int total=0;
    string[ ] sMoth = {"1月:","2月:","3月:","4月:","5月:","6月:","7月:","8月:","9月:","10月:","11月:","12月:"};
    string[] startEnd = {"20060101","20060201","20060301","20060401","20060501","20060601","20060701","20060801","20060901","20061001","20061101","20061201","20070101"};
    string DateBegin,DateEnd,strMonth;
    OracleConnection myConn = new OracleConnection(connString);
    myConn.Open();
    for(int i=0;i<12;i++)
    {
    DateBegin = startEnd[i];
    DateEnd = startEnd[i+1];
    strMonth = "select count(*) from sgclczrzb where czsj>= to_date('" + DateBegin + " 00:00:00','yyyy-mm-dd hh24:mi:ss') and czsj < to_date('" + DateEnd + " 00:00:00','yyyy-mm-dd hh24:mi:ss')";
    OracleCommand myComm = new OracleCommand(strMonth,myConn);
    monthCount[i] = int.Parse(myComm.ExecuteOracleScalar().ToString());
    total += monthCount[i];
    }
    //创建一个长度为600,宽带为300的Bitmap实例
    Bitmap bm = new Bitmap(600,300);
    Graphics g;
    g = Graphics.FromImage(bm);
    g.SmoothingMode = SmoothingMode.AntiAlias;
    g.Clear(Color.Snow);
    g.DrawString("2006年度每月手工处理操作记录数占总记录数比率示意图", new Font("宋体", 15,FontStyle.Bold), Brushes.Black, new Point(35, 5));
    //在绘画图面的指定位置,以指定的字体、指定的颜色绘制指定的字符串。即为图表标题
                //以下代码是是实现图01中的右上部区域
                //以上是在图01中为下面绘制定位
                Point myRec = new Point(465 , 68);
                Point myDec = new Point(490 , 68);
                Point myTxt = new Point(525 , 68);
                g.DrawString("单位:单" , new Font ( "宋体" ,9) , Brushes.Black , new Point (465 , 50));
                for(int i = 0; i<sMoth.Length; i++) 
                {
    //填充小方块
                    g.FillRectangle( new SolidBrush(GetColor(i)),myRec.X,myRec.Y,20,10);
                    //绘制小方块
                    g.DrawRectangle( Pens.Black , myRec.X ,myRec.Y , 20 , 10);
    //绘制小方块右边的文字
                    g.DrawString ( sMoth[i].ToString() , new Font( "宋体", 9) ,Brushes.Black ,myDec);
                    g.DrawString ( monthCount[i].ToString(), new Font( "宋体", 9) ,Brushes.Black ,myTxt);
                    myRec.Y += 15 ;
                    myDec.Y += 15 ;
                    myTxt.Y += 15 ;
                }
    g.DrawString("总计∶"+total.ToString(), new Font( "宋体", 9) ,Brushes.Black ,465,myTxt.Y);
                //以下代码是根据从数据库中得到的数值大小,绘制扇型,并以相应色彩填充扇型
                int iTatal = 0; 
    float[] fCurrentAngle={0,0,0,0,0,0,0,0,0,0,0,0};
                float fStartAngle = 0;
                for(int i = 0; i < monthCount.Length; i++)
                {
                    iTatal = iTatal + monthCount[i];
                }
    for(int i = 0;i< 12;i++)
    {
    //以下代码是获得要绘制扇型的开始角度
    float iTemp = monthCount[i];
    fCurrentAngle[i] = (iTemp * 360)/iTatal;
    }
                for(int i = 0; i<monthCount.Length; i++)
                {  
                    //根据参数绘制扇型
                    g.DrawPie(Pens.Black,100,40 ,250,250,fStartAngle,fCurrentAngle[i]);
                    //以指定色彩填充绘制的扇型
                    g.FillPie(new SolidBrush(GetColor(i)),100,40,250,250,fStartAngle,fCurrentAngle[i]);
                    fStartAngle += fCurrentAngle[i];
                }
    //g.DrawEllipse(Pens.Black,100,40,250,250);
                //画出图片的边框
                Pen p = new Pen (Color.Green,2);
                g.DrawRectangle (p,1,1,598,298);            //向客户端输出数据流,并以此数据流形成Jpeg图片
                bm.Save(Response.OutputStream,ImageFormat.Jpeg);
    //bm.Save(Server.MapPath("piePic.jpg"),  ImageFormat.Jpeg);
              
    //结束绘制 
    bm.Dispose();   
    g.Dispose();其中GetColor方法如下:
    private Color GetColor(int itemIndex)         
    {
    Color MyColor;
    int i = itemIndex;
                switch (i)             
    {
    case 0 :
    MyColor = Color.Green;
    return MyColor;
    case 1 :
    MyColor = Color.Red;
    return MyColor;
    case 2:
    MyColor = Color.Yellow;
    return MyColor;
    case 3 :
    MyColor = Color.Blue;
    return MyColor;
    case 4 :
    MyColor = Color.Orange;
    return MyColor;
    case 5 :
    MyColor = Color.Aqua;
    return MyColor;
    case 6:
    MyColor = Color.SkyBlue;
    return MyColor;
    case 7:
    MyColor = Color.DeepPink;
    return MyColor;
    case 8:
    MyColor = Color.Wheat;
    return MyColor;
    case 9:
    MyColor = Color.Brown;
    return MyColor;
    case 10:
    MyColor = Color.Pink;
    return MyColor;
    case 11:
    MyColor = Color.BurlyWood;
    return MyColor;
    case 12:
    MyColor = Color.Chartreuse;
    return MyColor;
    default:
    MyColor = Color.Pink;
    return MyColor;
    }
    }
    希望对你有所启发和帮助
      

  4.   

    ref:
    http://community.csdn.net/Expert/topic/4923/4923275.xml?temp=.923855