利用.net相关类生成如下饼图,步骤如下:
第一步:建立如下表格:
字段名称 | 类型 | 说明 |
ID | 自动编号 | 主键 ,递增 |
YF | 数字 | 销售月份 |
SL | 数字 | 销量 |
第二步:初始化表格数据:
ID | YF | SL |
1 | 1 | 12 |
2 | 2 | 5 |
3 | 3 | 7 |
4 | 4 | 20 |
5 | 5 | 16 |
6 | 6 | 10 |
7 | 7 | 19 |
8 | 8 | 8 |
9 | 9 | 7 |
10 | 10 | 13 |
11 | 11 | 11 |
12 | 12 | 15 |
第三步:定义一个类,封装两个方法,代码如下:
using System; using System.Web; using System.Drawing; using System.Data;
/// <summary> ///ObtainColor 的摘要说明 /// </summary> public class ObtainColor { public static 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.Azure; 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; } }
public static void GetBitmap(DataSet ds ,HttpResponse res) { int[] iXiaoSH = new int[12]; //定义一个数组,用以存放从数据库中读取的销售数据 string[] sMoth = new string[12]; //定义一个数组,用以存放从数据库中读取的销售月份s int iIndex = 0; DataTable dt = ds.Tables[0]; for (int i = 0; i < dt.Rows.Count; i++) { iXiaoSH[iIndex] = Convert.ToInt32(dt.Rows[iIndex][0]); sMoth[iIndex] = dt.Rows[iIndex][1].ToString() + "月"; iIndex++; } Bitmap bm = new Bitmap(600, 300); //创建一个长度为600,宽带为300的Bitmap实例 Graphics g; g = Graphics.FromImage(bm); g.Clear(Color.Snow); //在绘画图面的指定位置,以指定的字体、指定的颜色绘制指定的字符串。即为图表标题 g.DrawString("××公司××××年度销售情况一览表", new Font("宋体", 16), Brushes.Black, new Point(5, 5));
Point myRec = new Point(515, 30); Point myDec = new Point(540, 30); Point myTxt = new Point(565, 30); g.DrawString("单位:万套", new Font("宋体", 9), Brushes.Black, new Point(515, 12)); for (int i = 0; i < sMoth.Length; i++) { g.FillRectangle(new SolidBrush(ObtainColor.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(iXiaoSH[i].ToString(), new Font("宋体", 9), Brushes.Black, myTxt); myRec.Y += 15; myDec.Y += 15; myTxt.Y += 15; } //以下代码是根据从数据库中得到的数值大小,绘制扇型,并以相应色彩填充扇型,//从而构成图01中的Pie图 int iTatal = 0; float fCurrentAngle = 0; float fStartAngle = 0; for (int i = 0; i < iXiaoSH.Length; i++) { iTatal = iTatal + iXiaoSH[i]; } for (int i = 0; i < iXiaoSH.Length; i++) { //以下代码是获得要绘制扇型的开始角度 if (i == iXiaoSH.Length - 1) { fCurrentAngle = 360 - fStartAngle; } else { int iTemp = iXiaoSH[i]; fCurrentAngle = (iTemp * 360) / iTatal; } //根据参数绘制扇型 g.DrawPie(Pens.Black, 100, 40, 250, 250, fStartAngle, fCurrentAngle); //以指定色彩填充绘制的扇型
g.FillPie(new SolidBrush(ObtainColor.GetColor(i)), 100, 40, 250, 250, fStartAngle, fCurrentAngle); fStartAngle += fCurrentAngle; }
//画出图片的边框 Pen p = new Pen(Color.Black, 2); g.DrawRectangle(p, 1, 1, 598, 298);
//向客户端输出数据流,并以此数据流形成Jpeg图片 //bm.Save ( Response.OutputStream , System.Drawing.Imaging.ImageFormat.Jpeg ) ; System.IO.MemoryStream ms = new System.IO.MemoryStream(); bm.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); res.ClearContent(); res.ContentType = "image/Gif"; res.BinaryWrite(ms.ToArray()); } } |
第四步:在aspx页面上调用,生成饼图
<% //自己封装的类,网友自己实现生成一个DataSet对象 //生成DataSet对象的sql语句:SELECT YF ,SL FROM MonthSale ORDER BY YF ComInput ci = ComInput.getComInput(); String sql = TranslateSQL.GetSqlFormXML("XML.CUSTOMERS.test3", ci, Cache); DataSet ds = DBTools.GetDBManager().Query(sql);
ObtainColor.GetBitmap(ds, Response); %> |