.NET网页显示饼形图


     既然在学习GDI+今天就乘胜追击,顺便研究了一下饼形图的实现,具体的效果和代码如下,新学习的知识,在这里留一个笔记吧算是。

     数据库字段及数据如下:

     。。

    最终呈现效果如下:

    。。

  接下来,就不用我说了,赤裸裸的源码奉上,大家也不用矜持啦。


  

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Drawing ;
using System.Drawing.Drawing2D ;
using System.Collections;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        CreateImage();
    }
    private void CreateImage()
    {
        //把连接字串指定为一个常量
        SqlConnection Con = new SqlConnection("server=QH-20150804WJPO;uid=sa;pwd=123;database=Xianxian");
        Con.Open();
        string cmdtxt = "select *  from tb_12";
        //SqlCommand Com = new SqlCommand(cmdtxt, Con);
        DataSet ds = new DataSet();
        SqlDataAdapter Da = new SqlDataAdapter(cmdtxt, Con);
        Da.Fill(ds);
        Con.Close();
        float Total = 0.0f, Tmp;

        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            //转换成单精度。也可写成Convert.ToInt32
            Tmp = Convert.ToSingle(ds.Tables[0].Rows[i]["Quantity"]);
            Total += Tmp;
        }

        //设置字体,fonttitle为主标题的字体
        Font fontlegend = new Font("verdana", 9);
        Font fonttitle = new Font("verdana", 10, FontStyle.Bold);

        //背景宽
        int width = 230;
        int bufferspace = 15;
        int legendheight = fontlegend.Height * (ds.Tables[0].Rows.Count + 1) + bufferspace;
        int titleheight = fonttitle.Height + bufferspace;
        int height = width + legendheight + titleheight + bufferspace;//白色背景高
        int pieheight = width;
        Rectangle pierect = new Rectangle(0, titleheight, width, pieheight);

        //加上各种随机色
        ArrayList colors = new ArrayList();
        Random rnd = new Random();
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            colors.Add(new SolidBrush(Color.FromArgb(rnd.Next(255), rnd.Next(255), rnd.Next(255))));

        //创建一个bitmap实例
        Bitmap objbitmap = new Bitmap(width, height);
        Graphics objgraphics = Graphics.FromImage(objbitmap);

        //画一个白色背景
        objgraphics.FillRectangle(new SolidBrush(Color.White), 0, 0, width, height);

        //画一个亮黄色背景      
        objgraphics.FillRectangle(new SolidBrush(Color.Beige), pierect);

        //以下为画饼图(有几行row画几个)
        float currentdegree = 0.0f;
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            objgraphics.FillPie((SolidBrush)colors[i], pierect, currentdegree,
              Convert.ToSingle(ds.Tables[0].Rows[i]["Quantity"]) / Total * 360);
            currentdegree += Convert.ToSingle(ds.Tables[0].Rows[i]["Quantity"]) / Total * 360;
        }
        //以下为生成主标题
        SolidBrush blackbrush = new SolidBrush(Color.Black);
        string title = " 各类图书销售比例调查";
        StringFormat stringFormat = new StringFormat();
        stringFormat.Alignment = StringAlignment.Center;
        stringFormat.LineAlignment = StringAlignment.Center;

        objgraphics.DrawString(title, fonttitle, blackbrush,
            new Rectangle(0, 0, width, titleheight), stringFormat);
        //列出各字段与得数目
        objgraphics.DrawRectangle(new Pen(Color.Black, 2), 0, height - legendheight, width, legendheight);
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            objgraphics.FillRectangle((SolidBrush)colors[i], 5, height - legendheight + fontlegend.Height * i + 5, 10, 10);
            objgraphics.DrawString(((String)ds.Tables[0].Rows[i]["BookKind"]) + " —— " + Convert.ToString(Convert.ToSingle(ds.Tables[0].Rows[i]["Quantity"]) * 100 / Total).Substring(0, 5) + "%", fontlegend, blackbrush,
         20, height - legendheight + fontlegend.Height * i + 1);
        }
        //图像总的高度-一行字体的高度,即是最底行的一行字体高度(height - fontlegend.Height )
        objgraphics.DrawString("图书销售总数:" + Convert.ToString(Total) + "万本", fontlegend, blackbrush, 5, height - fontlegend.Height);
        Response.ContentType = "image/Jpeg";
        objbitmap.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
        objgraphics.Dispose();
        objbitmap.Dispose();
    }
}
        之前总是想着,自己一定要变得非常好,给家人最好的温情,后来吧,这份心情倒是没变,激情却没了。以前总觉得自己可以很棒,可以到处闯一闯,现在真的有点后悔离家那么远,不在父母的身边。人多的时候,感觉很落寞,人少的时候也落寞。最近心情总是忽阴忽晴,顿时感悟肆意,乱七八糟的,我也不知道我到底想要说什么,反正就是很乏很倦,睡觉会做恶梦,吃饭后还是觉得很饿,前一秒说完喜欢你,后一秒就担心我们将有变坏的关系。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值