using System;
using System.Web.UI;
using System.Data;
using System.Web.UI.WebControls;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Web;
using System.ComponentModel;
using System.Collections ;
![](/Images/OutliningIndicators/None.gif)
namespace Tom.Control
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
[ToolboxData("<{0}:Columniation runat=server></{0}:Columniation>")]
public class Columniation: System.Web.UI.WebControls.WebControl
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
private const int _colorLimit = 12; //颜色列表
private Color[] _color =
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
Color.Chocolate,
Color.YellowGreen,
Color.Olive,
Color.DarkKhaki,
Color.Sienna,
Color.PaleGoldenrod,
Color.Peru,
Color.Tan,
Color.Khaki,
Color.DarkGoldenrod,
Color.Maroon,
Color.OliveDrab
};
![](/Images/OutliningIndicators/InBlock.gif)
private DataTable items;//列表项名称和值
![](/Images/OutliningIndicators/InBlock.gif)
private string text="数据";
private string datastd="标准值";
private string data="实时数据";
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
int kds=10; //刻度数
float kddw=100; //没刻度大小
![](/Images/OutliningIndicators/InBlock.gif)
int zmheight=500; //真个图区高
int zmwidth=740; //真个图区宽
![](/Images/OutliningIndicators/InBlock.gif)
int height=400;//呈现区高
int width=730;
int cxtop=30;//呈现区距顶距离
int cxleft=30;//呈现区左边距离
![](/Images/OutliningIndicators/InBlock.gif)
Color bzlink=Color.Black;//标准线颜色
![](/Images/OutliningIndicators/InBlock.gif)
int Chart_Flag=1;
Bitmap bm ;
![](/Images/OutliningIndicators/InBlock.gif)
int Displacement =0; //获取负坐标刻度数
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
[Bindable(true),
Category("Appearance"),
DefaultValue("")]
public string Text
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
get
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return text;
}
![](/Images/OutliningIndicators/InBlock.gif)
set
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
text = value;
}
}
[Bindable(true),
Category("Appearance"),
DefaultValue("")]
public string DataStdName
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
get
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return datastd;
}
![](/Images/OutliningIndicators/InBlock.gif)
set
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
datastd = value;
}
}
![](/Images/OutliningIndicators/InBlock.gif)
[Bindable(true),
Category("Appearance"),
DefaultValue("")]
public string DataName
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
get
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return data;
}
![](/Images/OutliningIndicators/InBlock.gif)
set
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
data = value;
}
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 需要呈现的数据
/// </summary>
public DataTable Items
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
set
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{items=value;}
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 需要显示的刻度量
/// </summary>
public int Kdcount
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{kds=value;}
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 刻度大小
/// </summary>
![](/Images/OutliningIndicators/InBlock.gif)
public float Kddw
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{set
{kddw=value;}}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
public int ChatStyle
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{set
{this.Chart_Flag=value;}}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 将此控件呈现给指定的输出参数。
/// </summary>
/// <param text="output"> 要写出到的 HTML 代码 </param>
protected override void Render(HtmlTextWriter output)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
//if(dt==null)
//{
// return "没有数据";
//}
//设计样式
kd(items);
output.Write(makeimage(items,"c:/"));
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
private string makeimage(DataTable dt,string imagefile)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
string url="";
switch(Chart_Flag)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
case 1:
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
this.Draw_X_Y_Bar(dt);
url=this.Drar_Bar(dt);
![](/Images/OutliningIndicators/InBlock.gif)
break;
}
case 2:
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
this.Draw_X_Y (dt);
url=this.Drow_Lin(dt);
![](/Images/OutliningIndicators/InBlock.gif)
break;
}
case 3:
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
url=this.Draw_Pie(dt);
break;
}
![](/Images/OutliningIndicators/InBlock.gif)
}
return url;
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 换算成实际值
/// </summary>
/// <param text="kd">提供的值</param>
/// <returns>返回换算后的实际值</returns>
private float bl(float kd)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
float bls=1;
bls=(float)height/((float)kds*(float)kddw);
return (float)kd*bls;
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
//通过数据计算刻度,和负坐标数#region //通过数据计算刻度,和负坐标数
private void kd(DataTable dt)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
float mintest=float.MaxValue;
float maxtest=float.MinValue;
![](/Images/OutliningIndicators/InBlock.gif)
float maxnegative=0f;
![](/Images/OutliningIndicators/InBlock.gif)
for (int j=1;j<dt.Columns .Count ;j++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
for(int i=0;i<dt.Rows.Count;i++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
float test=System.Convert.ToSingle(dt.Rows[i][j]);
//求最小值
if(test<0 && test<maxnegative)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
maxnegative=test;
}
//求最大值
if(test>maxtest)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
maxtest=test;
}
}
}
![](/Images/OutliningIndicators/InBlock.gif)
maxtest=maxtest+Math.Abs(maxnegative);
![](/Images/OutliningIndicators/InBlock.gif)
// this.Page .Response .Write (maxtest);
![](/Images/OutliningIndicators/InBlock.gif)
kddw=maxtest/kds;
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
double exp = Convert.ToDouble(Math.Floor(Math.Log10(maxtest)));
![](/Images/OutliningIndicators/InBlock.gif)
// this.Page .Response .Write ("exp"+exp.ToString ()+"<br>");
float tempMax = Convert.ToSingle(Math.Ceiling(maxtest / Math.Pow(10, exp)) * Math.Pow(10, exp));
// this.Page .Response .Write ("temp_Max"+exp.ToString ()+"<br>");
![](/Images/OutliningIndicators/InBlock.gif)
kddw = tempMax / kds;
double expTick = Convert.ToDouble(Math.Floor(Math.Log10(kddw)));
kddw = Convert.ToSingle(Math.Ceiling(kddw / Math.Pow(10, expTick)) * Math.Pow(10, expTick));
this.Displacement =Math.Abs ((int) Math.Floor(maxnegative/kddw));
// this.Page .Response.Write (this.Displacement);
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
#endregion
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
//
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
绘制折线图#region 绘制折线图
![](/Images/OutliningIndicators/InBlock.gif)
private string Drow_Lin(DataTable dt)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
//通过循环画出曲线图
int x=-1;
int bzy=-1;
Graphics bp=Graphics.FromImage(bm);
for (int j=1;j<dt.Columns.Count ;j++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
for(int i=0;i<dt.Rows.Count;i++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
//标准刻度
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
float bzkd=bl(System.Convert.ToSingle(dt.Rows[i].ItemArray[j]));
//实际刻度
// float sjkd=bl(System.Convert.ToSingle(dt.Rows[i].ItemArray[2]));
int bztop=cxtop+height-(int)bzkd-3- (int) (bl(this.Displacement*kddw));
//填充标准柱(画刷,起点X,起点Y,宽,高)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
bp.FillRectangle(new SolidBrush(_color[j-1]),(i*40)+cxleft+20-3,bztop,6,6);
// int sstop=zmheight-(int)sjkd-(zmheight-cxtop-height)-3;
//填充实时点(画刷,起点X,起点Y,宽,高)
// bp.FillRectangle(new SolidBrush(ss),(i*30)+cxleft,sstop,6,6);
//绘制点到点连接线
if(x!=-1)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
//绘制标准点连接线
bp.DrawLine(new Pen( _color[j-1] ,1.6F),new Point(x,bzy),new Point((i*40)+cxleft+20,bztop));
//绘制实时点连接线
// bp.DrawLine(new Pen(ss,1.6F),new Point(x+3,ssy+4),new Point((i*30)+cxleft+10,sstop+4));
}
x=(i*40)+cxleft+20;
bzy=bztop;
// ssy=sstop;
// bp.DrawString(dt.Rows[i].ItemArray[0].ToString (),new Font("宋体",9),new SolidBrush(Color.Black),new PointF((i*40)+cxleft+10,height+cxtop+1));
}
x=-1;
}
FileStream fs=new FileStream(Page.Server.MapPath(Page.Request.Url.AbsolutePath.Replace(".aspx",".jpg")),FileMode.Create);
bm.Save(fs,ImageFormat.Jpeg);
![](/Images/OutliningIndicators/InBlock.gif)
bm.Dispose();
bp.Dispose();
fs.Close();
return "<img src="+Page.Request.Url.AbsolutePath.Replace(".aspx",".jpg")+" ></img>";
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
#endregion
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
画住状图#region 画住状图
//画住状图
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
private string Drar_Bar(DataTable dt)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{ Graphics bp=Graphics.FromImage(bm);
![](/Images/OutliningIndicators/InBlock.gif)
int flag=0;
for(int i=0;i<dt.Rows.Count;i++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
for (int j=1;j<dt.Columns.Count ;j++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
float sjkd=bl(System.Convert.ToSingle(dt.Rows[i].ItemArray[j]));
float top= cxtop+height-(int)sjkd-(int)(bl(this.Displacement*kddw));
if (sjkd<0)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
top=top+sjkd;
sjkd=Math.Abs (sjkd);
}
bp.FillRectangle(new SolidBrush(this._color[j]),(flag*40)+cxleft+20,top,20,sjkd);
![](/Images/OutliningIndicators/InBlock.gif)
// this.Page .Response .Write ("<br>"+ (flag*40+cxleft+20) );
![](/Images/OutliningIndicators/InBlock.gif)
flag++ ;
![](/Images/OutliningIndicators/InBlock.gif)
}
}
![](/Images/OutliningIndicators/InBlock.gif)
FileStream fs=new FileStream(Page.Server.MapPath(Page.Request.Url.AbsolutePath.Replace(".aspx",".jpg")),FileMode.Create);
bm.Save(fs,ImageFormat.Jpeg);
![](/Images/OutliningIndicators/InBlock.gif)
bm.Dispose();
bp.Dispose();
fs.Close();
return "<img src="+Page.Request.Url.AbsolutePath.Replace(".aspx",".jpg")+" ></img>";
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
}
#endregion
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
画 X,Y 轴 线和刻度#region 画 X,Y 轴 线和刻度
![](/Images/OutliningIndicators/InBlock.gif)
private void Draw_X_Y(DataTable dt )
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
//调整宽度
width=45*dt.Rows.Count +30;
zmwidth=width+cxleft+80;
//创建一个画布
bm=new Bitmap(zmwidth,zmheight);
//在新建的画布上画一个图
Graphics bp=Graphics.FromImage(bm);
![](/Images/OutliningIndicators/InBlock.gif)
bp.Clear(Color.AliceBlue);
//填充图表呈现区背景(画刷,起点x,起点Y,高,宽)
bp.FillRectangle(new SolidBrush(Color.WhiteSmoke),cxleft,cxtop,width,height);
//描绘呈现区边框
bp.DrawRectangle(Pens.Black,cxleft,cxtop,width,height);
//绘制图表名称
bp.DrawString(text,new Font("宋体",9),new SolidBrush(Color.Black),new PointF(zmwidth/2,10));
//绘制图表说明
bp.DrawRectangle(Pens.Black,cxleft+width+10,zmheight/2,60,15*dt.Columns.Count -1);
for (int j=0;j<dt.Columns .Count-1 ;j++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
bp.FillRectangle(new SolidBrush(this._color[j]),cxleft+width+10+2,zmheight/2+6+16*j,8,8);
//文字说明
bp.DrawString(dt.Columns[j+1].ColumnName,new Font("宋体",9),new SolidBrush(Color.Black),new PointF(cxleft+width+10+2+8,zmheight/2+4+j*12));
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
//通过循环绘制标准线
for(int i=0;i<=kds;i++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
string Cur_Kd;
if (i-this.Displacement!=0)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
Cur_Kd=((i-this.Displacement)*(kddw)).ToString ("#,###.##");
// this.Page .Response .Write ("<br>abc"+Cur_Kd.ToString ());
}
else
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
Cur_Kd="0";
}
bp.DrawString (Cur_Kd,new Font("宋体",9),new SolidBrush(Color.Black),new PointF(2,zmheight-(bl(i*kddw)+(zmheight-cxtop-height)+4)));
//填充标准线(画刷,起点X,起点Y,宽,高)
int top=cxtop+height-(int)(bl(i*kddw));
bp.DrawLine(new Pen(bzlink),new Point(cxleft-4,top),new Point(cxleft+width,top));
}
![](/Images/OutliningIndicators/InBlock.gif)
for(int j=1;j<dt.Rows.Count+1;j++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
bp.DrawLine (new Pen (bzlink),new Point(cxleft+j*40, (int) (cxtop+height-bl(this.Displacement*kddw) ) ),new Point (cxleft+j*40, (int) (cxtop+height-bl(this.Displacement*kddw) )+4));
![](/Images/OutliningIndicators/InBlock.gif)
bp.DrawString(dt.Rows[j-1].ItemArray[0].ToString (),new Font("宋体",9),new SolidBrush(Color.Black),new PointF(((j-1)*40)+cxleft+10, (int) (cxtop+height-bl(this.Displacement*kddw) ) +1));
![](/Images/OutliningIndicators/InBlock.gif)
}
}
#endregion
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
画 柱状 x,y 刻度#region 画 柱状 x,y 刻度
![](/Images/OutliningIndicators/InBlock.gif)
private void Draw_X_Y_Bar (DataTable dt)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
//调整宽度
width=45*dt.Rows.Count * (dt.Columns .Count-1) +10;
zmwidth=width+cxleft+80;
//创建一个画布
bm=new Bitmap(zmwidth,zmheight);
//在新建的画布上画一个图
Graphics bp=Graphics.FromImage(bm);
![](/Images/OutliningIndicators/InBlock.gif)
bp.Clear(Color.AliceBlue);
//填充图表呈现区背景(画刷,起点x,起点Y,高,宽)
bp.FillRectangle(new SolidBrush(Color.WhiteSmoke),cxleft,cxtop,width,height);
//描绘呈现区边框
bp.DrawRectangle(Pens.Black,cxleft,cxtop,width,height);
//绘制图表名称
bp.DrawString(text,new Font("宋体",9),new SolidBrush(Color.Black),new PointF(zmwidth/2,10));
//绘制图表说明
bp.DrawRectangle(Pens.Black,cxleft+width+10,zmheight/2,60,15*dt.Columns.Count -1);
for (int j=0;j<dt.Columns .Count-1 ;j++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
bp.FillRectangle(new SolidBrush(this._color[j]),cxleft+width+10+2,zmheight/2+6+16*j,8,8);
//文字说明
bp.DrawString(dt.Columns[j+1].ColumnName,new Font("宋体",9),new SolidBrush(Color.Black),new PointF(cxleft+width+10+2+8,zmheight/2+4+j*12));
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
//通过循环绘制标准线
for(int i=0;i<=kds;i++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
string Cur_Kd;
if (i-this.Displacement!=0)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
Cur_Kd=((i-this.Displacement)*(kddw)).ToString ("#,###.##");
//
}
else
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
Cur_Kd="0";
}
bp.DrawString (Cur_Kd,new Font("宋体",9),new SolidBrush(Color.Black),new PointF(2,zmheight-(bl(i*kddw)+(zmheight-cxtop-height)+4)));
//填充标准线(画刷,起点X,起点Y,宽,高)
int top=cxtop+height-(int)(bl(i*kddw));
bp.DrawLine(new Pen(bzlink),new Point(cxleft-4,top),new Point(cxleft+width,top));
// this.Page .Response .Write ("<br>abc"+Cur_Kd.ToString ());
}
for(int j=1;j<dt.Rows.Count+1;j++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
bp.DrawLine (new Pen (bzlink),new Point( cxleft+ (dt.Columns .Count -1)*j* 40, (int) (cxtop+height-bl(this.Displacement*kddw) ) ),new Point (cxleft+ (dt.Columns .Count -1)*j* 40, (int) (cxtop+height-bl(this.Displacement*kddw) )+12));
![](/Images/OutliningIndicators/InBlock.gif)
bp.DrawString(dt.Rows[j-1].ItemArray[0].ToString (),new Font("宋体",9),new SolidBrush(Color.Black),new PointF(( (dt.Columns .Count -1) *(j-1)*40)+cxleft+40, (int) (cxtop+height-bl(this.Displacement*kddw) ) +1));
![](/Images/OutliningIndicators/InBlock.gif)
}
}
#endregion
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
饼状图#region 饼状图
![](/Images/OutliningIndicators/InBlock.gif)
private string Draw_Pie(DataTable dt)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
int width = 240;
const int page_top_margin = 15;
![](/Images/OutliningIndicators/InBlock.gif)
float total = 0.0F, tmp;
int i;
for (i=0; i < dt.Rows.Count; i++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
tmp = Convert.ToSingle(dt.Rows[i][1]);
total += tmp;
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
Font fontLegend = new Font("Verdana", 10);
![](/Images/OutliningIndicators/InBlock.gif)
Font fontTitle = new Font("Verdana", 12, FontStyle.Bold);
int titleHeight = fontTitle.Height + page_top_margin;
![](/Images/OutliningIndicators/InBlock.gif)
int row_gap = 6;
int start_of_rect = 8;
int rect_width = 14;
int rect_height = 16;
![](/Images/OutliningIndicators/InBlock.gif)
int row_height;
if (rect_height > fontLegend.Height) row_height = rect_height; else row_height = fontLegend.Height;
row_height += row_gap;
![](/Images/OutliningIndicators/InBlock.gif)
int legendHeight = row_height * (dt.Rows.Count+1);
int height = width + legendHeight + titleHeight + page_top_margin;
int pieHeight = width;
Rectangle pieRect = new Rectangle(0, titleHeight, width, pieHeight);
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
float currentDegree = 0.0F;
![](/Images/OutliningIndicators/InBlock.gif)
Bitmap bm = new Bitmap(width, height);
Graphics objGraphics= Graphics.FromImage(bm) ;
![](/Images/OutliningIndicators/InBlock.gif)
SolidBrush blackBrush = new SolidBrush(Color.Black);
![](/Images/OutliningIndicators/InBlock.gif)
objGraphics.FillRectangle(new SolidBrush(Color.White), 0, 0, width, height);
for (i = 0; i < dt.Rows.Count; i++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
objGraphics.FillPie(
new SolidBrush (this._color[i]),
pieRect,
currentDegree,
Convert.ToSingle(dt.Rows[i][1]) / total * 360);
![](/Images/OutliningIndicators/InBlock.gif)
currentDegree += Convert.ToSingle(dt.Rows[i][1]) / total * 360;
}
![](/Images/OutliningIndicators/InBlock.gif)
StringFormat stringFormat = new StringFormat();
stringFormat.Alignment = StringAlignment.Center;
stringFormat.LineAlignment = StringAlignment.Center;
![](/Images/OutliningIndicators/InBlock.gif)
objGraphics.DrawString(this.datastd, fontTitle, blackBrush,
new Rectangle(0, 0, width, titleHeight), stringFormat);
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
objGraphics.DrawRectangle(
new Pen(Color.Gray, 1),
0,
height - legendHeight,
width-4,
legendHeight-1);
![](/Images/OutliningIndicators/InBlock.gif)
int y = height - legendHeight + row_gap;
![](/Images/OutliningIndicators/InBlock.gif)
for (i = 0; i < dt.Rows.Count; i++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
objGraphics.FillRectangle(
new SolidBrush (this._color[i]),
start_of_rect, // x
y,
rect_width,
rect_height);
![](/Images/OutliningIndicators/InBlock.gif)
objGraphics.DrawString(
Convert.ToString(dt.Rows[i][0])
+ " - " +
Convert.ToString(dt.Rows[i][1]),
fontLegend,
blackBrush,
start_of_rect + rect_width + 4,
y);
![](/Images/OutliningIndicators/InBlock.gif)
y += rect_height + row_gap;
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
FileStream fs=new FileStream(Page.Server.MapPath(Page.Request.Url.AbsolutePath.Replace(".aspx",".jpg")),FileMode.Create);
bm.Save(fs,ImageFormat.Jpeg);
![](/Images/OutliningIndicators/InBlock.gif)
bm.Dispose();
objGraphics.Dispose();
fs.Close();
return "<img src="+Page.Request.Url.AbsolutePath.Replace(".aspx",".jpg")+" ></img>";
![](/Images/OutliningIndicators/InBlock.gif)
}
#endregion
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
}
}
![](/Images/OutliningIndicators/None.gif)
调用页面
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;
![](/Images/OutliningIndicators/None.gif)
namespace Web_Graphic
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
protected Tom.Control.Columniation Columniation1;
![](/Images/OutliningIndicators/InBlock.gif)
private void Page_Load(object sender, System.EventArgs e)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/InBlock.gif)
DataTable dt=new DataTable();
DataColumn dc;
dc=new DataColumn();
dc.DataType=System.Type.GetType("System.String");
dc.ColumnName="name";
dt.Columns.Add(dc);
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
dc=new DataColumn();
dc.DataType=System.Type.GetType("System.Int32");
dc.ColumnName="db";
dt.Columns.Add(dc);
dc=new DataColumn();
dc.DataType=System.Type.GetType("System.Int32");
dc.ColumnName="df";
dt.Columns.Add(dc);
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
DataRow dr=dt.NewRow();
dr["name"]="点1";
dr["db"]="1400";
dr["df"]="500";
dt.Rows.Add(dr);
![](/Images/OutliningIndicators/InBlock.gif)
dr=dt.NewRow();
dr["name"]="点2";
dr["db"]="200";
dr["df"]="200";
dt.Rows.Add(dr);
![](/Images/OutliningIndicators/InBlock.gif)
dr=dt.NewRow();
dr["name"]="点3";
dr["db"]="-300";
dr["df"]="-600";
dt.Rows.Add(dr);
dr=dt.NewRow();
dr["name"]="点4";
dr["db"]="200";
dr["df"]="1500";
dt.Rows.Add(dr);
![](/Images/OutliningIndicators/InBlock.gif)
dr=dt.NewRow();
dr["name"]="点5";
dr["db"]="400";
dr["df"]="2400";
dt.Rows.Add(dr);
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
Columniation1.Items=dt;
Columniation1.ChatStyle=2; //1 为柱状,2 为折线,3为屏状
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
this.Load += new System.EventHandler(this.Page_Load);
![](/Images/OutliningIndicators/InBlock.gif)
}
#endregion
}
}
效果如下...
![](/images/cnblogs_com/gwazy/29351/o_饼状图.jpg)
![](/images/cnblogs_com/gwazy/29351/r_折线.jpg)
\