c# 中怎样把datatalble(逻辑表)中的统计数据绘制成饼图?谢谢
解决方案 »
- 求解devexpress控件中的spinEdit控件用法
- 软件打包,如何将外部EXE文件捆绑进去,安装界面的复选框来选择是否安装?
- 求<<.net企业应用高级编程-C#编程篇>>书籍源代码
- 关于鼠标事件的问题
- C#控件问题
- 如何读取和设置用enum标识的内容?
- 请各位帮忙提供一些C#编程的视频下载地址啊!谢谢啦!!!
- NHibernate出错啦!急。。。。。。。
- 调用delphi写成的普通dll(dll),dll一旦要创建窗体就会出错,为什么。
- 菜鸟问题,请问怎么让 点主from上的一个按钮就弹出另一个编好的窗体
- 想动态的在GroupBox添加多个按钮,按钮的位置怎么确定啊?
- 怎么移动当前的纪录?
如果没有,只能用画笔画了.
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;
}
}
希望对你有所启发和帮助
http://community.csdn.net/Expert/topic/4923/4923275.xml?temp=.923855