您现在的位置是:首页 >

饼状图为什么复制不了 如何在C#的WinForm中制作饼状图和柱状图

火烧 2022-02-09 17:59:13 1030
如何在C#的Wi Form中制作饼状图和柱状图   当我们的软件需要各种饼状图和柱状图来表示数据时 我们或许会想到用Office 中的图形控件或是第三方控件 但现在的第三方控件大都需要注册 有些免费的

如何在C#的WinForm中制作饼状图和柱状图  

  当我们的软件需要各种饼状图和柱状图来表示数据时 我们或许会想到用Offices中的图形控件或是第三方控件 但现在的第三方控件大都需要注册 有些免费的控件会有开发商的标记等 而对于使用Offices的图形控件来说 并不能在程序中得于很好控制 其使用的简易程度也较低 所以在这我给出在C#中使用GDI+实现饼状图和柱状图跟数据库联接显示数据的方法

饼状图为什么复制不了 如何在C#的WinForm中制作饼状图和柱状图

  using System;using System IO;//用于文件存取using System Data;//用于数据访问using System Drawing;//提供画GDI+图形的基本功能using System Drawing Text;//提供画GDI+图形的高级功能using System Drawing Drawing D;//提供画高级二维 矢量图形功能using System Drawing Imaging;//提供画GDI+图形的高级功能namespace BaseLayer{public class PieChart{public PieChart(){}//Render是图形大标题 图开小标题 图形宽度 图形长度 饼图的数据集和饼图的数据集要表示出来的数据public Image Render(string title string subTitle int width int height DataSet chartData int DataLine){const int SIDE_LENGTH = ;const int PIE_DIAMETER = ;DataTable dt = chartData Tables[ ];

  //通过输入参数 取得饼图中的总基数float sumData = ;foreach(DataRow dr in dt Rows){sumData += Convert ToSingle(dr[DataLine]);}//产生一个image对象 并由此产生一个Graphics对象Bitmap bm = new Bitmap(width height);Graphics g = 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 SIDE_LENGTH SIDE_LENGTH );//画饼图标题g DrawString(title new Font( Tahoma ) Brushes Black new PointF( ));//画饼图的图例g DrawString(subTitle new Font( Tahoma ) Brushes Black new PointF( ));//画饼图float curAngle = ;float totalAngle = ;for(int i= ;i<dt Rows Count;i++){curAngle = Convert ToSingle(dt Rows[i][DataLine]) / sumData * ;

  g FillPie(new SolidBrush(ChartUtil GetChartItemColor(i)) PIE_DIAMETER PIE_DIAMETER totalAngle curAngle);g DrawPie(Pens Black PIE_DIAMETER PIE_DIAMETER totalAngle curAngle);totalAngle += curAngle;}//画图例框及其文字g DrawRectangle(Pens Black );g DrawString( 图表说明 new Font( Tahoma FontStyle Bold) Brushes Black new PointF( ));

  //画图例各项PointF boxOrigin = new PointF( );PointF textOrigin = new PointF( );float percent = ;for(int i= ;i<dt Rows Count;i++){g FillRectangle(new SolidBrush(ChartUtil GetChartItemColor(i)) boxOrigin X boxOrigin Y );g DrawRectangle(Pens Black boxOrigin X boxOrigin Y );percent = Convert ToSingle(dt Rows[i][DataLine]) / sumData * ;g DrawString(dt Rows[i][ ] ToString() + + dt Rows[i][ ] ToString() + ( + percent ToString( ) + %) new Font( Tahoma ) Brushes Black textOrigin);boxOrigin Y += ;textOrigin Y += ;}//回收资源g Dispose();return (Image) bm;

  }}

  //画条形图public class BarChart{public BarChart(){}//Render是图形大标题 图开小标题 图形宽度 图形长度 饼图的数据集和饼图的数据集public Image Render(string title string subTitle int width int height DataSet chartData){const int SIDE_LENGTH = ;const int CHART_TOP = ;const int CHART_HEIGHT = ;const int CHART_LEFT = ;const int CHART_WIDTH = ;DataTable dt = chartData Tables[ ];

  //计算最高的点float highPoint = ;foreach(DataRow dr in dt Rows){if(highPoint<Convert ToSingle(dr[ ])){highPoint = Convert ToSingle(dr[ ]);}}//建立一个Graphics对象实例Bitmap bm = new Bitmap(width height);try{Graphics g = 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 SIDE_LENGTH SIDE_LENGTH );//画大标题g DrawString(title new Font( Tahoma ) Brushes Black new PointF( ));//画小标题g DrawString(subTitle new Font( Tahoma ) Brushes Black new PointF( ));//画条形图float barWidth = CHART_WIDTH / (dt Rows Count * );PointF barOrigin = new PointF(CHART_LEFT + (barWidth / ) );float barHeight = dt Rows Count;for(int i= ;i<dt Rows Count;i++){barHeight = Convert ToSingle(dt Rows[i][ ]) * / 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 * );}//设置边g DrawLine(new Pen(Color Black ) new Point(CHART_LEFT CHART_TOP) new Point(CHART_LEFT CHART_TOP + CHART_HEIGHT));g DrawLine(new Pen(Color Black ) new Point(CHART_LEFT CHART_TOP + CHART_HEIGHT) new Point(CHART_LEFT + CHART_WIDTH CHART_TOP + CHART_HEIGHT));//画图例框和文字g DrawRectangle(new Pen(Color Black ) );g DrawString( 图表说明 new Font( Tahoma FontStyle Bold) Brushes Black new PointF( ));

  //画图例PointF boxOrigin = new PointF( );PointF textOrigin = new PointF( );for(int i= ;i<dt Rows Count;i++){g FillRectangle(new SolidBrush(ChartUtil GetChartItemColor(i)) boxOrigin X boxOrigin Y );g DrawRectangle(Pens Black boxOrigin X boxOrigin Y );g DrawString(dt Rows[i][ ] ToString() + + dt Rows[i][ ] ToString() new Font( Tahoma ) Brushes Black textOrigin);boxOrigin Y += ;textOrigin Y += ;}//输出图形g Dispose();return bm;}catch{return bm;}}}public class ChartUtil{public ChartUtil(){}public static Color GetChartItemColor(int itemIndex){Color selectedColor;switch(itemIndex){case :selectedColor = Color Blue;break;case :selectedColor = Color Red;break;case :selectedColor = Color Yellow;break;case :selectedColor = Color Purple;break;default:selectedColor = Color Green;break;}return selectedColor;}}}

lishixinzhi/Article/program/net/201311/11951  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码