none
asp.net在内容页绘制饼图? RRS feed

  • 问题

  • 我在网站上建了一个母版页,所有的页面都继承母版页。在内容页中我根据从数据库中查询出来的数据,绘制饼图,此页面要显示查询出来的数据和饼图。在还没Draw饼图前,页面能正常显示数据,(我的数据用Gridview控件显示),但是在draw饼图之后,页面上就只有一个饼图,我调试了一下,程序有把数据绑定到gridview控件上。但是为什么没有同时显示出来
    2010年2月2日 6:51

答案

  • 单独将 饼图做成一个页面,把参数用url传给饼图页。


    表格页.aspx 用下面的代码调用饼图
    <img src="饼图页.aspx?total=100&count1=50&count2=30&count3=10&count4=5&count5=5" />


    饼图页.aspx用下面的获得参数

    protected void Page_Load(object sender,EventArgs e)
        {
              int total=int.Parse(Request.Parems["total"]);
              int count1=int.Parse(Request.Parems["count1"]);
              int count2=int.Parse(Request.Parems["count2"]);
              ……

              Response.ContentType="application/octet-stream";
              DrawGraphics(total,count1,count2……);

        }


    时刻学习,等待机会的到来。
    • 已建议为答案 htz 2010年2月4日 8:29
    • 已标记为答案 KeFang Chen 2010年2月4日 8:44
    2010年2月3日 6:23
  • 那个 饼图页面 不能有html代码。因为要输出图片流。

    <table>
    <tr><td><img src="饼图页.aspx?total=100&count1=50&count2=30&count3=10&count4=5&count5=5" /></td></tr>
    <tr><td bgcolor="#fece00" class="p3" width="200" align="center">Flexa系統报表饼图</td></tr>
    </table>
    时刻学习,等待机会的到来。
    2010年2月4日 3:30

全部回复

  • 饼图控件是用的什么呢?

    从你的描述上看,gridview和Draw饼图 应该是独立绑定数据的。不应该出不来。

    是不是你用的那个饼图控件有什么特殊的?
    时刻学习,等待机会的到来。
    2010年2月2日 9:01
  • 明白点说,我是从数据库中读取数据(百分数)在绑定到gridview控件的同时,分别记录各个阶段百分数的个数(比如小于20%等等),然后在页面用GDI+画饼图的,但是运行的时候数据是有绑定到gridview中,可在页面只显示饼图,原来页面的所有东西都不会显示。

    2010年2月3日 0:50
  • 你好,

    如果你想自己绘制饼图,可以参考下面这个帖子中X.X.Y版主所提供的连接,应该对你有帮助。

    http://social.microsoft.com/Forums/en-US/295/thread/958d02fd-2dc5-45a3-af18-929a9e96211e


    Microsoft Online Community Support
    2010年2月3日 2:54

  •     public void DrawGraphics(int total, int count1, int count2, int count3, int count4, int count5)
        {
            //绘画饼图
            //total机器总数,count1为小于20%,count2为20%-40%,count3为40%-60%,count4为60%-80%,count5为大于80%
            //计算各比例
            int percent1 = count1 * 100 / total;
            int percent2 = count2 * 100 / total;
            int percent3 = count3 * 100 / total;
            int percent4 = count4 * 100 / total;
            int percent5 = 100 - percent1 - percent2 - percent3 - percent4;
            //开始绘制饼图
            int[] percents ={ percent1, percent2, percent3, percent4, percent5 };
            Color[] drawColor ={ Color.Red, Color.LightSteelBlue, Color.LightSkyBlue, Color.Orange, Color.LimeGreen };
            Bitmap myBmp = new Bitmap(960, 510);
            Graphics g = Graphics.FromImage(myBmp);
            g.Clear(Color.White);
            Point location = new Point(350, 200);
            Size size = new Size(300, 300);//饼图大小
            int angle = 0;//角度数,用于计算占圆周的百分比
            for (int i = 0; i < percents.Length; i++)
            {
                g.FillPie(new SolidBrush(drawColor[i]), new Rectangle(location, size), (Single)(angle * 360 / 100), (Single)(percents[i] * 360 / 100));
                angle = angle + percents[i];
            }
            Pen pen = new Pen(Color.Black, 1);
            //g.DrawRectangle(pen, 700, 200, 180, 300);
            g.DrawRectangle(pen, 720, 230, 50, 20);
            g.FillRectangle(new SolidBrush(Color.Red),720,230,50,20);
            g.DrawString("< 20%:"+count1, new Font("Arial", 8), new SolidBrush(Color.Black),new PointF(775, 232));
            g.FillRectangle(new SolidBrush(Color.LightSteelBlue), 720, 270, 50, 20);
            g.DrawString("20%-40%:" + count2, new Font("Arial", 8), new SolidBrush(Color.Black), new PointF(775, 272));
            g.FillRectangle(new SolidBrush(Color.LightSkyBlue), 720, 310, 50, 20);
            g.DrawString("40%-60%:" + count3, new Font("Arial", 8), new SolidBrush(Color.Black), new PointF(775, 312));
            g.FillRectangle(new SolidBrush(Color.Orange), 720, 350, 50, 20);
            g.DrawString("60%-80%:" + count4, new Font("Arial", 8), new SolidBrush(Color.Black), new PointF(775, 352));
            g.FillRectangle(new SolidBrush(Color.LimeGreen), 720, 390, 50, 20);
            g.DrawString("> 80%:" + count5, new Font("Arial", 8), new SolidBrush(Color.Black), new PointF(775, 392));
            g.DrawString("机器总数:"+total,new Font("Arial", 8), new SolidBrush(Color.Black), new PointF(720, 432));
            myBmp.Save(Response.OutputStream, ImageFormat.Jpeg);

            //Response.End();

        }

    2010年2月3日 3:12
  • 你的函数直接操纵了 Response对象的输出流。这样ie浏览器会把 这个页面识别为图像文件。


    时刻学习,等待机会的到来。
    2010年2月3日 5:05
  • 可是不用Response.OutputStream输出的话,网页上一片空白,用了的话,原本的东西又不见了,只剩下饼图。
    2010年2月3日 5:45
  • 单独将 饼图做成一个页面,把参数用url传给饼图页。


    表格页.aspx 用下面的代码调用饼图
    <img src="饼图页.aspx?total=100&count1=50&count2=30&count3=10&count4=5&count5=5" />


    饼图页.aspx用下面的获得参数

    protected void Page_Load(object sender,EventArgs e)
        {
              int total=int.Parse(Request.Parems["total"]);
              int count1=int.Parse(Request.Parems["count1"]);
              int count2=int.Parse(Request.Parems["count2"]);
              ……

              Response.ContentType="application/octet-stream";
              DrawGraphics(total,count1,count2……);

        }


    时刻学习,等待机会的到来。
    • 已建议为答案 htz 2010年2月4日 8:29
    • 已标记为答案 KeFang Chen 2010年2月4日 8:44
    2010年2月3日 6:23
  • 我照你的方法,单独一个页面显示饼图了,但是我在页面上加了<td bgcolor="#fece00" class="p3" width="200" align="center">Flexa系統报表饼图</td>,是想让用户知道这个饼图是显示什么数据的,但是运行的时候还是只有饼图,其他的东西仍然见不到?
    2010年2月4日 1:55
  • 我照你的方法,单独一个页面显示饼图了,但是我在页面上加了<td bgcolor="#fece00" class="p3" width="200" align="center">Flexa系統报表饼图</td>,是想让用户知道这个饼图是显示什么数据的,但是运行的时候还是只有饼图,其他的东西仍然见不到?
    2010年2月4日 1:55
  • 我照你的方法,单独一个页面显示饼图了,但是我在页面上加了<td bgcolor="#fece00" class="p3" width="200" align="center">Flexa系統报表饼图</td>,是想让用户知道这个饼图是显示什么数据的,但是运行的时候还是只有饼图,其他的东西仍然见不到?
    2010年2月4日 1:55
  • 那个 饼图页面 不能有html代码。因为要输出图片流。

    <table>
    <tr><td><img src="饼图页.aspx?total=100&count1=50&count2=30&count3=10&count4=5&count5=5" /></td></tr>
    <tr><td bgcolor="#fece00" class="p3" width="200" align="center">Flexa系統报表饼图</td></tr>
    </table>
    时刻学习,等待机会的到来。
    2010年2月4日 3:30
  • 原来是这样,难怪我怎么修改其他的东西都会不见了,那我再试试看。
    2010年2月4日 5:51
  • 终于搞定了,谢谢各位啦。
    2010年2月4日 6:22