asp.net生成饼图

利用.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,宽带为300Bitmap实例

        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);

%>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值