也不愿意整理了,你看看有没有用。他是从数据库里读出信息,然后根据读出的信息化一个饼图。
其中问题以及票数和该问题对应的显示颜色都在数据库中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
}
}
其中问题以及票数和该问题对应的显示颜色都在数据库中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
}
}
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;
}
}
}