如何在C#的WinForm中制作饼状图和柱状图.docx
- 文档编号:30413861
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:13
- 大小:57.27KB
如何在C#的WinForm中制作饼状图和柱状图.docx
《如何在C#的WinForm中制作饼状图和柱状图.docx》由会员分享,可在线阅读,更多相关《如何在C#的WinForm中制作饼状图和柱状图.docx(13页珍藏版)》请在冰豆网上搜索。
如何在C#的WinForm中制作饼状图和柱状图
如何在C#的WinForm中制作饼状图和柱状图
作者:
佚名文章来源:
不详点击数:
105更新时间:
2006-6-21热
当我们的软件需要各种饼状图和柱状图来表示数据时,我们或许会想到用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,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),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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 如何 C# WinForm 制作 饼状图 柱状图