g.FillPie(newSolidBrush(ChartUtil.GetChartItemColor(i)),100,65,PIE_DIAMETER,PIE_DIAMETER,totalAngle,curAngle);
g.DrawString(图表说明,newFont(Tahoma,12,FontStyle.Bold),Brushes.Black,newPointF(200,300));
{
g.FillRectangle(newSolidBrush(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][DataLine])/sumData*100;
g.DrawString(dt.Rows[i][1].ToString()+-+dt.Rows[i][0].ToString()+(+percent.ToString(0)+%),newFont(Tahoma,10),Brushes.Black,textOrigin);
boxOrigin.Y+=15;
textOrigin.Y+=15;
}
//回收资源
g.Dispose();
return(Image)bm;
}
}
//画条形图
publicclassBarChart
{
publicBarChart()
{
}
//Render是图形大标题,图开小标题,图形宽度,图形长度,饼图的数据集和饼图的数据集
publicImageRender(stringtitle,stringsubTitle,intwidth,intheight,DataSetchartData)
{
constintSIDE_LENGTH=400;
constintCHART_TOP=75;
constintCHART_HEIGHT=200;
constintCHART_LEFT=50;
constintCHART_WIDTH=300;
DataTabledt=chartData.Tables[0];
//计算最高的点
floathighPoint=0;
foreach(DataRowdrindt.Rows)
{
if(highPoint{
highPoint=Convert.ToSingle(dr[0]);
}
}
//建立一个Graphics对象实例
Bitmapbm=newBitmap(width,height);
try
{
Graphicsg=Graphics.FromImage(bm);
//设置条图图形和文字属性
g.ScaleTransform((Convert.ToSingle(width))/SIDE_LENGTH,(Convert.ToSingle(height))/SIDE_LENGTH);
g.SmoothingMode=SmoothingMode.Default;
g.TextRenderingHint=TextRenderingHint.AntiAlias;
//设定画布和边
g.Clear(Color.White);
g.DrawRectangle(Pens.Black,0,0,SIDE_LENGTH-1,SIDE_LENGTH-1);
//画大标题
g.DrawString(title,newFont(Tahoma,14),Brushes.Black,newPointF(5,5));
//画小标题
g.DrawString(subTitle,newFont(Tahoma,12),Brushes.Black,newPointF(7,35));
//画条形图
floatbarWidth=CHART_WIDTH/(dt.Rows.Count*2);
PointFbarOrigin=newPointF(CHART_LEFT+(barWidth/2),0);
floatbarHeight=dt.Rows.Count;
for(inti=0;i
{
barHeight=Convert.ToSingle(dt.Rows[i][0])*200/highPoint*1;
barOrigin.Y=CHART_TOP+CHART_HEIGHT-barHeight;
g.FillRectangle(newSolidBrush(ChartUtil.GetChartItemColor(i)),barOrigin.X,barOrigin.Y,barWidth,barHeight);
barOrigin.X=barOrigin.X+(barWidth*2);
}
//设置边
g.DrawLine(newPen(Color.Black,2),newPoint(CHART_LEFT,CHART_TOP),newPoint(CHART_LEFT,CHART_TOP+CHART_HEIGHT));
g.DrawLine(newPen(Color.Black,2),newPoint(CHART_LEFT,CHART_TOP+CHART_HEIGHT),newPoint(CHART_LEFT+CHART_WIDTH,CHART_TOP+CHART_HEIGHT));
//画图例框和文字
g.DrawRectangle(newPen(Color.Black,1),200,300,199,99);
g.DrawString(图表说明,newFont(Tahoma,12,FontStyle.Bold),Brushes.Black,newPointF(200,300));
//画图例
PointFboxOrigin=newPointF(210,330);
PointFtextOrigin=newPointF(235,326);
for(inti=0;i
{
g.FillRectangle(newSolidBrush(ChartUtil.GetChartItemColor(i)),boxOrigin.X,boxOrigin.Y,20,10);
g.DrawRectangle(Pens.Black,boxOrigin.X,boxOrigin.Y,20,10);
g.DrawString(dt.Rows[i][1].ToString()+-+dt.Rows[i][0].ToString(),newFont(Tahoma,10),Brushes.Black,textOrigin);
boxOrigin.Y+=15;
textOrigin.Y+=15;
}
//输出图形
g.Dispose();
returnbm;
}
catch
{
returnbm;
}
}
}
publicclassChartUtil
{
publicChartUtil()
{
}
publicstaticColorGetChartItemColor(intitemIndex)
{
ColorselectedColor;
switch(itemIndex)
{
case0:
selectedColor=Color.Blue;
break;
case1:
selectedColor=Color.Red;
break;
case2:
selectedColor=Color.Yellow;
break;
case3:
selectedColor=Color.Purple;
break;
default:
selectedColor=Color.Green;
break;
}
returnselectedColor;
}
}
}
叶子
当我们的软件需要各种饼状图和柱状图来表示数据时,我们或许会想到用Offices中的图形控件或是第三方控件,但现在的第三方控件大都需要注册,有些免费的控件会有开发商的标记等。
而对于使用Offices的图形控件来说,并不能在程序中得于很好控制,其使用的简易程度也较低,所以在这我给出在C#中使用GDI+实现饼状图和柱状图跟数据库联接显示数据的方法。
usingSystem;
usingSystem.IO;//用于文件存取
usingSystem.Data;//用于数据访问
usingSystem.Drawing;//提供画GDI+图形的基本功能
usingSystem.Drawing.Text;//提供画GDI+图形的高级功能
usingSystem.Drawing.Drawing2D;//提供画高级二维,矢量图形功能
usingSystem.Drawing.Imaging;//提供画GDI+图形的高级功能
namespaceBaseLayer
{
publicclassPieChart
{
publicPieChart()
{
}
//Render是图形大标题,图开小标题,图形宽度,图形长度,饼图的数据集和饼图的数据集要表示出来的数据
publicImageRender(stringtitle,stringsubTitle,intwidth,intheight,DataSetchartData,intDataLine)
{
constintSIDE_LENGTH=400;
constintPIE_DIAMETER=200;
DataTabledt=chartData.Tables[0];
//通过输入参数,取得饼图中的总基数
floatsumData=0;
foreach(DataRowdrindt.Rows)
{
sumData+=Convert.ToSingle(dr[DataLine]);
}
//产生一个image对象,并由此产生一个Graphics对象
Bitmapbm=newBitmap(width,height);
Graphicsg=Graphics.FromImage(bm);
//设置对象g的属性
g.ScaleTransform((Convert.ToSingle(width))/SIDE_LENGTH,(Convert.ToSingle(height))/SIDE_LENGTH);
g.SmoothingMode=SmoothingMode.Default;
g.TextRenderingHint=TextRenderingHint.AntiAlias;
//画布和边的设定
g.Clear(Color.White);
g.DrawRectangle(Pens.Black,0,0,SIDE_LENGTH-1,欢迎光临学网,收藏本篇文章[1][2][3][4][5][6]
$False$
SIDE_LENGTH-1);
//画饼图标题
g.DrawString(title,newFont("Tahoma",14),Brushes.Black,newPointF(5,5));
//画饼图的图例
g.DrawString(subTitle,newFont("Tahoma",12),Brushes.Black,newPointF(7,35));
//画饼图
floatcurAngle=0;
floattotalAngle=0;
for(inti=0;i
{
curAngle=Convert.ToSingle(dt.Rows[i][DataLine])/sumData*360;
g.FillPie(newSolidBrush(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;
}
//画图例框及其文字
g.DrawRectangle(Pens.Black,200,300,199,99);
g.DrawString("图表说明",newFont("Tahoma",12,FontStyle.Bold),Brushes.Black,newPointF(200,300));
//画图例各项
PointFboxOrigin=newPointF(210,330);
PointFtextOrigin=newPointF(235,326);
floatpercent=0;
for(inti=0;i
{
g.FillRectangle(newSolidBrush(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][DataLine])/sumData*100;
g.DrawString(dt.Rows[i][1].ToString()+"-"+dt.Rows[i][0].ToString()+"("+percent.ToString("0")+"%)",newFont("Tahoma",10),文章整理:
学网(本站)[1][2][3][4][5][6]
Brushes.Black,textOrigin);
boxOrigin.Y+=15;
textOrigin.Y+=15;
}
//回收资源
g.Dispose();
return(Image)bm;
}
}
//画条形图
publicclassBarChart
{
publicBarChart()
{
}
//Render是图形大标题,图开小标题,图形宽度,图形长度,饼图的数据集和饼图的数据集
publicImageRender(stringtitle,stringsubTitle,intwidth,intheight,DataSetchartData)
{
constintSIDE_LENGTH=400;
constintCHART_TOP=75;
const&n
bsp;intCHART_HEIGHT=200;
constintCHART_LEFT=50;
constintCHART_WIDTH=300;
DataTabledt=chartData.Tables[0];
//计算最高的点
floathighPoint=0;
foreach(DataRowdrindt.Rows)
{
if(highPoint{
highPoint=Convert.ToSingle(dr[0]);
}
}
//建立一个Graphics对象实例
Bitmapbm=newBitmap(width,height);
try
{
Graphicsg=Graphics.FromImage(bm);
//设置条图图形和文字属性
g.ScaleTransform((Convert.ToSingle(width))/SIDE_LENGTH,(Convert.ToSingle(height))/SIDE_LENGTH);
g.SmoothingMode=Smoothing欢迎光临学网,收藏本篇文章[1][2][3][4][5][6]
Mode.Default;
g.TextRenderingHint=TextRenderingHint.AntiAlias;
//设定画布和边
g.Clear(Color.White);
g.DrawRectangle(Pens.Black,0,0,SIDE_LENGTH-1,SIDE_LENGTH-1);
//画大标题
g.DrawString(title,newFont("Tahoma",14),Brushes.Black,newPointF(5,5));
//画小标题
g.DrawString(subTitle,newFont("Tahoma",12),Brushes.Black,newPointF(7,35));
//画条形图
floatbarWidth=CHART_WIDTH/(dt.Rows.Count*2);
PointFbarOrigin=newPointF(CHART_LEFT+(barWidth/2),0);
floatbarHeight=dt.Rows.Count;
for(inti=0;i
{
barHeight