也不愿意整理了,你看看有没有用。他是从数据库里读出信息,然后根据读出的信息化一个饼图。
其中问题以及票数和该问题对应的显示颜色都在数据库中using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Text;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;namespace Ourasp.Vote
{
/// <summary>
/// VoteResult 的摘要说明。
/// </summary>
public class VoteResult : System.Web.UI.Page
{
protected System.Data.SqlClient.SqlDataAdapter sqlDa;
protected System.Data.SqlClient.SqlConnection sqlCn;
protected Ourasp.Vote.DsVoteRuselt dsVoteRuselt1;
protected System.Data.SqlClient.SqlCommand sqlSelectCommand1;
protected System.Web.UI.WebControls.Image Image1;

private void Page_Load(object sender, System.EventArgs e)
{
sqlSelectCommand1.Parameters["@QId"].Value =Int32.Parse(Request.QueryString["qid"]);
sqlDa.Fill(this.dsVoteRuselt1,"VoteAnswer"); Bitmap VoteResult = new Bitmap(450,300);
Graphics g = Graphics.FromImage(VoteResult);

g.SmoothingMode = SmoothingMode.AntiAlias;

float sumData = 0;
for(int j=0;j< dsVoteRuselt1.Tables["VoteAnswer"].Rows.Count;j++)
{
sumData += (int)(dsVoteRuselt1.Tables["VoteAnswer"].Rows[j]["Hits"]);
}  g.Clear(Color.GhostWhite);
float startAngle=0;
float sweepAngle=0;
string mycolor; g.DrawString("问卷结果统计",new Font("幼圆",16,FontStyle.Bold),Brushes.Navy,new PointF(5,5));
g.DrawString("---"+dsVoteRuselt1.Tables["VoteAnswer"].Rows[0][0].ToString(),new Font("幼圆",14,FontStyle.Bold),Brushes.CornflowerBlue,new PointF(150,25));
for(int i=0;i<dsVoteRuselt1.Tables["VoteAnswer"].Rows.Count;i++)
{
mycolor = dsVoteRuselt1.Tables["VoteAnswer"].Rows[i]["Color"].ToString().Trim();
startAngle = startAngle+sweepAngle;
sweepAngle = (Single.Parse(dsVoteRuselt1.Tables["VoteAnswer"].Rows[i][2].ToString())/sumData)*360;
g.FillPie(new SolidBrush(Color.FromName(mycolor)),0,50,200,200,startAngle,sweepAngle); 
g.FillRectangle(new SolidBrush(Color.FromName(mycolor)),220,100+20*i,10,10);
string Stat = dsVoteRuselt1.Tables["VoteAnswer"].Rows[i][1].ToString()+":"
+(Single.Parse(dsVoteRuselt1.Tables["VoteAnswer"].Rows[i][2].ToString())/sumData*100).ToString()+"%"
+"["+dsVoteRuselt1.Tables["VoteAnswer"].Rows[i][2].ToString()+"票]";
g.DrawString(Stat,new Font("宋体",10,FontStyle.Regular),Brushes.Navy,new PointF(230,99+20*i));
} string thefullname=Server.MapPath("/vote.jpg");
VoteResult.Save(thefullname,ImageFormat.Jpeg);
Image1.ImageUrl = thefullname;
} #region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{    
this.sqlDa = new System.Data.SqlClient.SqlDataAdapter();
this.sqlSelectCommand1 = new System.Data.SqlClient.SqlCommand();
this.sqlCn = new System.Data.SqlClient.SqlConnection();
this.dsVoteRuselt1 = new Ourasp.Vote.DsVoteRuselt();
((System.ComponentModel.ISupportInitialize)(this.dsVoteRuselt1)).BeginInit();
// 
// sqlDa
// 
this.sqlDa.SelectCommand = this.sqlSelectCommand1;
this.sqlDa.TableMappings.AddRange(new System.Data.Common.DataTableMapping[] {
new System.Data.Common.DataTableMapping("Table", "VoteAnswer", new System.Data.Common.DataColumnMapping[] {
  new System.Data.Common.DataColumnMapping("Question", "Question"),
  new System.Data.Common.DataColumnMapping("Answer", "Answer"),
  new System.Data.Common.DataColumnMapping("Hits", "Hits"),
  new System.Data.Common.DataColumnMapping("AId", "AId"),
  new System.Data.Common.DataColumnMapping("Color", "Color")})});
// 
// sqlSelectCommand1
// 
this.sqlSelectCommand1.CommandText = "SELECT VoteQuestion.Question, VoteAnswer.Answer, VoteAnswer.Hits, VoteAnswer.AId," +
" VoteAnswer.Color, VoteQuestion.QId FROM VoteAnswer INNER JOIN VoteQuestion ON V" +
"oteAnswer.QId = VoteQuestion.QId WHERE (VoteQuestion.QId = @QId)";
this.sqlSelectCommand1.Connection = this.sqlCn;
this.sqlSelectCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@QId", System.Data.SqlDbType.Int, 4, "QId"));
// 
// sqlCn
// 
this.sqlCn.ConnectionString = "data source=ASPX\\NetSDK;initial catalog=Ourasp;integrated security=SSPI;persist s" +
"ecurity info=False;user id=ASPNET;workstation id=ASPX;packet size=4096";
// 
// dsVoteRuselt1
// 
this.dsVoteRuselt1.DataSetName = "DsVoteRuselt";
this.dsVoteRuselt1.Locale = new System.Globalization.CultureInfo("zh-CN");
this.dsVoteRuselt1.Namespace = "http://www.tempuri.org/DsVoteRuselt.xsd";
this.Load += new System.EventHandler(this.Page_Load);
((System.ComponentModel.ISupportInitialize)(this.dsVoteRuselt1)).EndInit(); }
#endregion
}
}

解决方案 »

  1.   

    这是用vs.net写的,关键代码在Page_Load部分
      

  2.   

    我这里有一个饼图和直方图的程序,希望对你有用!using System;
    using System.IO;
    using System.Data;
    using System.Drawing;
    using System.Drawing.Text;
    using System.Drawing.Drawing2D;
    using System.Drawing.Imaging;namespace Insight_cs.WebCharts
    {
    public class PieChart
    {
    public PieChart()
    {
    } public void Render(string title, string subTitle, int width, int height, DataSet chartData, Stream target)
    {
    const int SIDE_LENGTH = 400;
    const int PIE_DIAMETER = 200; DataTable dt = chartData.Tables[0];

    //calculate total amount of units in the pie, based on the data passed in
    float sumData = 0;
    foreach(DataRow dr in dt.Rows)
    {
    sumData += Convert.ToSingle(dr[1]);
    } //create a new image
    Bitmap bm = new Bitmap(width,height);
    Graphics g = Graphics.FromImage(bm); //set image attributes
    g.ScaleTransform((Convert.ToSingle(width))/SIDE_LENGTH,(Convert.ToSingle(height))/SIDE_LENGTH);
    g.SmoothingMode = SmoothingMode.Default;
    g.TextRenderingHint = TextRenderingHint.AntiAlias;

    //draw canvas and border
    g.Clear(Color.White);
    g.DrawRectangle(Pens.Black,0,0,SIDE_LENGTH-1,SIDE_LENGTH-1); //draw title
    g.DrawString(title,new Font("Tahoma",24),Brushes.Black,new PointF(5,5)); //draw sub-title
    g.DrawString(subTitle,new Font("Tahoma",14),Brushes.Black,new PointF(7,35)); //draw the pie
    float curAngle = 0;
    float totalAngle = 0;
    for(int i=0;i<dt.Rows.Count;i++)
    {
    curAngle = Convert.ToSingle(dt.Rows[i][1]) / sumData * 360;

    g.FillPie(new SolidBrush(ChartUtil.GetChartItemColor(i)),100,65,PIE_DIAMETER,PIE_DIAMETER,totalAngle,curAngle);
    g.DrawPie(Pens.Black,100,65,PIE_DIAMETER,PIE_DIAMETER,totalAngle,curAngle); totalAngle += curAngle;
    } //draw legend box and label
    g.DrawRectangle(Pens.Black,200,300,199,99);
    g.DrawString("Legend",new Font("Tahoma",12,FontStyle.Bold),Brushes.Black,new PointF(200,300));

    //draw legend items
    PointF boxOrigin = new PointF(210,330);
    PointF textOrigin = new PointF(235,326); float percent = 0;
    for(int i=0;i<dt.Rows.Count;i++)
    {
    g.FillRectangle(new SolidBrush(ChartUtil.GetChartItemColor(i)),boxOrigin.X,boxOrigin.Y,20,10);
    g.DrawRectangle(Pens.Black,boxOrigin.X,boxOrigin.Y,20,10); percent = Convert.ToSingle(dt.Rows[i][1]) / sumData * 100;
    g.DrawString(dt.Rows[i][0].ToString() + " - " + dt.Rows[i][1].ToString() + " (" + percent.ToString("0") + "%)",new Font("Tahoma",10),Brushes.Black,textOrigin);
    boxOrigin.Y += 15;
    textOrigin.Y += 15;
    } //stream the pie chart image to the browser via the Response.OutputStream object
    bm.Save(target, ImageFormat.Gif); //garbage collection
    bm.Dispose();
    g.Dispose();
    }
    } public class BarChart
    {
    public BarChart()
    {
    } public void Render(string title, string subTitle, int width, int height, DataSet chartData, Stream target)
    {
    const int SIDE_LENGTH = 400;
    const int CHART_TOP = 75;
    const int CHART_HEIGHT = 200;
    const int CHART_LEFT = 50;
    const int CHART_WIDTH = 300; DataTable dt = chartData.Tables[0];

    //calculate highest data point
    float highPoint = 0;
    foreach(DataRow dr in dt.Rows)
    {
    if(highPoint<Convert.ToSingle(dr[1]))
    {
    highPoint = Convert.ToSingle(dr[1]);
    }
    } //create a new image
    Bitmap bm = new Bitmap(width,height);
    Graphics g = Graphics.FromImage(bm); //set image attributes
    g.ScaleTransform((Convert.ToSingle(width))/SIDE_LENGTH,(Convert.ToSingle(height))/SIDE_LENGTH);
    g.SmoothingMode = SmoothingMode.Default;
    g.TextRenderingHint = TextRenderingHint.AntiAlias;

    //draw canvas and border
    g.Clear(Color.White);
    g.DrawRectangle(Pens.Black,0,0,SIDE_LENGTH-1,SIDE_LENGTH-1); //draw title
    g.DrawString(title,new Font("Tahoma",24),Brushes.Black,new PointF(5,5)); //draw sub-title
    g.DrawString(subTitle,new Font("Tahoma",14),Brushes.Black,new PointF(7,35)); //draw the bars
    float barWidth = CHART_WIDTH / (dt.Rows.Count * 2);
    PointF barOrigin = new PointF(CHART_LEFT + (barWidth / 2),0);
    float barHeight = dt.Rows.Count;
    for(int i=0;i<dt.Rows.Count;i++)
    {
    barHeight = Convert.ToSingle(dt.Rows[i][1]) * 200 / highPoint;
    barOrigin.Y = CHART_TOP + CHART_HEIGHT - barHeight; g.FillRectangle(new SolidBrush(ChartUtil.GetChartItemColor(i)),barOrigin.X,barOrigin.Y,barWidth,barHeight);
    barOrigin.X = barOrigin.X + (barWidth * 2);
    } //draw bottom and left margins
    g.DrawLine(new Pen(Color.Black,2),new Point(CHART_LEFT,CHART_TOP),new Point(CHART_LEFT,CHART_TOP + CHART_HEIGHT));
    g.DrawLine(new Pen(Color.Black,2),new Point(CHART_LEFT,CHART_TOP + CHART_HEIGHT),new Point(CHART_LEFT + CHART_WIDTH,CHART_TOP + CHART_HEIGHT)); //draw legend box and label
    g.DrawRectangle(new Pen(Color.Black,1),200,300,199,99);
    g.DrawString("Legend",new Font("Tahoma",12,FontStyle.Bold),Brushes.Black,new PointF(200,300));

    //draw legend items
    PointF boxOrigin = new PointF(210,330);
    PointF textOrigin = new PointF(235,326); for(int i=0;i<dt.Rows.Count;i++)
    {
    g.FillRectangle(new SolidBrush(ChartUtil.GetChartItemColor(i)),boxOrigin.X,boxOrigin.Y,20,10);
    g.DrawRectangle(Pens.Black,boxOrigin.X,boxOrigin.Y,20,10); g.DrawString(dt.Rows[i][0].ToString() + " - " + dt.Rows[i][1].ToString(),new Font("Tahoma",10),Brushes.Black,textOrigin);
    boxOrigin.Y += 15;
    textOrigin.Y += 15;
    } //stream the bar chart image to the browser via the Response.OutputStream object
    bm.Save(target, ImageFormat.Gif);

    //garbage collection
    bm.Dispose();
    g.Dispose();
    }
    } public class ChartUtil
    {
    public ChartUtil()
    {
    } public static Color GetChartItemColor(int itemIndex)
    {
    Color selectedColor; switch(itemIndex)
    {
    case 0:
    selectedColor = Color.Blue;
    break;
    case 1:
    selectedColor = Color.Red;
    break;
    case 2:
    selectedColor = Color.Yellow;
    break;
    case 3:
    selectedColor = Color.Purple;
    break;
    default:
    selectedColor = Color.Green;
    break;
    } return selectedColor;
    }
    }
    }