我还是喜欢javascript解决这个问题,客户端嘛,很不错的,柱状图的问题已近解决,代码供大家参考谢谢,结贴! using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Drawing.Imaging;namespace PageTest { /// <summary> /// DrawBar 的摘要说明。 /// </summary> public class DrawBar : System.Web.UI.Page { private void Page_Load(object sender, System.EventArgs e) { DrawBarNow(); } #region Web 窗体设计器生成的代码 override protected void OnInit(EventArgs e) { // // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); }
http://dotnet.aspx.cc/ShowDetail.aspx?id=221BC601-1A1B-4E1F-883D-04B043659703
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Drawing.Imaging;namespace PageTest
{
/// <summary>
/// DrawBar 的摘要说明。
/// </summary>
public class DrawBar : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
DrawBarNow();
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion private void DrawBarNow()
{
//创建一个长度为600,宽带为250的Bitmap实例
Bitmap bm = new Bitmap ( 800 , 300 ) ;
Graphics g ;
//由此Bitmap实例创建Graphic实例
g = Graphics.FromImage ( bm ) ;
//用Snow色彩为背景色填充此绘画图面
g.Clear ( Color.Snow ) ;
//在绘画图面的指定位置,以指定的字体、指定的颜色绘制指定的字符串。即为图表标题
g.DrawString ( "大赛" , new Font ( "隶书" , 16 ) , Brushes.Black , new Point ( 100 , 5 ) ) ;
//以下代码是是实现图下部
//Point myRec = new Point ( 535 , 30 ) ;
//Point myDec = new Point ( 560 , 26 ) ;
//以下是在图中为下面绘制定位
Point myRec = new Point ( 50 , 300 ) ;
Point myDec = new Point ( 15 , 280 ) ;
//g.DrawString ( "参赛人员" , new Font ( "宋体" , 9 ) , Brushes.Black , new Point ( 50 , 270 ) ) ;
for ( int i = 0 ; i < CreateDataSource().Table.Rows.Count ; i++ )
{
//绘制小方块,屏蔽显示,高度和宽度都是0
g.DrawRectangle ( Pens.Black , myRec.X , myRec.Y , 0 , 0 ) ;
//填充小方块,屏蔽显示,高度和宽度都是0
g.FillRectangle ( new SolidBrush ( GetColor ( i ) ) , myRec.X , myRec.Y , 0 , 0 ) ;
//绘制柱图下方文字
g.DrawString ( CreateDataSource().Table.Rows[i][2].ToString()+"号", new Font ( "宋体" , 9 ) , Brushes.Black , myDec) ;
//调整块图和文字间距
myRec.X += 40 ;
myDec.X += 40 ;
}
//以下代码是绘制图中的Bar图,及其投票数量
int iBarWidth = 40 ;
int scale = 10 ;
for ( int i = 0 ; i < CreateDataSource().Table.Rows.Count ; i++ )
{
int realScale = Convert.ToInt32(CreateDataSource().Table.Rows[i][1].ToString()) * scale ;
float realRate = Convert.ToSingle(GetRate(Convert.ToInt32(CreateDataSource().Table.Rows[i][1].ToString()))/100);
//绘制Bar图
g.DrawRectangle ( Pens.Black , ( i * iBarWidth ) + 15 , 250 - 300*realRate/100 , 20 , 300*realRate/100 + 5 ) ;
//以指定的色彩填充Bar图
g.FillRectangle ( new SolidBrush ( GetColor ( i ) ) , ( i * iBarWidth ) + 15 , 250 - 300*realRate/100 , 20 , 300*realRate/100 + 5 ) ;
//显示Bar图代表的数据
g.DrawString (realRate.ToString()+"%" , new Font ( "宋体" , 9 ) , Brushes.Black , ( i * iBarWidth ) + 15 , 235 - 300*realRate/100 ) ;
}
//以下代码是绘制图中的边框,并形成Jpeg文件,供浏览器显示出来
Pen p = new Pen ( Color.Snow, 1 ) ;
g.DrawRectangle ( p , 1 , 1 , 798 , 298 ) ;
this.Response.ClearContent();
this.Response.ContentType = "image/jpeg";
bm.Save ( Response.OutputStream , ImageFormat.Jpeg ) ;
this.Response.End();
}
//获取个柱体颜色
private Color GetColor ( int itemIndex )
{
Color MyColor ;
int i = itemIndex ;
switch (i)
{
case 0 :
MyColor = Color.Cornsilk;
return MyColor ;
case 1 :
MyColor = Color.Red;
return MyColor ;
case 2 :
MyColor = Color.Yellow;
return MyColor ;
case 3 :
MyColor = Color.SeaGreen;
return MyColor ;
case 4 :
MyColor = Color.Orange;
return MyColor ;
case 5 :
MyColor = Color.Coral;
return MyColor ;
case 6:
MyColor = Color.Gray;
return MyColor ;
case 7:
MyColor = Color.Maroon;
return MyColor ;
case 8:
MyColor = Color.Tomato;
return MyColor ;
case 9:
MyColor = Color.AliceBlue;
return MyColor ;
case 10:
MyColor = Color.Bisque;
return MyColor ;
case 11:
MyColor = Color.BurlyWood;
return MyColor ;
case 12:
MyColor = Color.SlateBlue;
return MyColor ;
case 13:
MyColor = Color.Thistle;
return MyColor ;
case 14:
MyColor = Color.LightSteelBlue;
return MyColor ;
case 15:
MyColor = Color.Cyan;
return MyColor ;
case 16:
MyColor = Color.GreenYellow;
return MyColor ;
case 17:
MyColor = Color.SpringGreen;
return MyColor ;
case 18:
MyColor = Color.Turquoise;
return MyColor ;
default:
MyColor = Color.Green;
return MyColor ;
}
} public double GetRate(int Num)
{
//初始化一个整数(投票数总和)为零
int CountNum=0;
for(int i=0;i<CreateDataSource().Table.Rows.Count;i++)
{
//循环获取总投票数
CountNum += Convert.ToInt32(CreateDataSource().Table.Rows[i][1].ToString());
}
return System.Math.Floor(Num*10000/CountNum);
}
public DataView CreateDataSource()
{ System.Data.DataTable dt = new System.Data.DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("id", typeof(Int32)));
dt.Columns.Add(new DataColumn("Num", typeof(Int32)));
dt.Columns.Add(new DataColumn("Name", typeof(String)));
for (int i=0; i<=18; i++)
{
dr = dt.NewRow();
dr[0] = i+5;
dr[1] = i*2+1;
dr[2] ="N"+(i*2+1);
dt.Rows.Add(dr);
}
DataView dv = new DataView(dt);
return dv;
}
}
}