• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 如何在C#的WinForm中制作餅狀圖和柱狀圖

    發表于:2007-05-25來源:作者:點擊數: 標簽:餅狀柱狀何在我們制作
    當我們的軟件需要各種餅狀圖和柱狀圖來表示數據時,我們或許會想到用Offices中的圖形控件或是第三方控件,但現在的第三方控件大都需要注冊,有些免費的控件會有 開發 商的標記等。而對于使用Offices的圖形控件來說,并不能在程序中得于很好控制,其使用的簡
    當我們的軟件需要各種餅狀圖和柱狀圖來表示數據時,我們或許會想到用Offices中的圖形控件或是第三方控件,但現在的第三方控件大都需要注冊,有些免費的控件會有開發商的標記等。而對于使用Offices的圖形控件來說,并不能在程序中得于很好控制,其使用的簡易程度也較低,所以在這我給出在C#中使用GDI+實現餅狀圖和柱狀圖跟數據庫聯接顯示數據的方法。
    using System;
    using System.IO;//用于文件存取
    using System.Data;//用于數據訪問
    using System.Drawing;//提供畫GDI+圖形的基本功能
    using System.Drawing.Text;//提供畫GDI+圖形的高級功能
    using System.Drawing.Drawing2D;//提供畫高級二維,矢量圖形功能
    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 = 400;
    const int PIE_DIAMETER = 200;
    DataTable dt = chartData.Tables[0];

    //通過輸入參數,取得餅圖中的總基數
    float sumData = 0;
    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,0,0,SIDE_LENGTH-1,SIDE_LENGTH-1);
    //畫餅圖標題
    g.DrawString(title,new Font("Tahoma",14),Brushes.Black,new PointF(5,5));
    //畫餅圖的圖例
    g.DrawString(subTitle,new Font("Tahoma",12),Brushes.Black,new PointF(7,35));
    //畫餅圖
    float curAngle = 0;
    float totalAngle = 0;
    for(int i=0;i<dt.Rows.Count;i++)
    {
    curAngle = Convert.ToSingle(dt.Rows[i][DataLine]) / sumData * 360;

    g.FillPie(new SolidBrush(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("圖表說明",new Font("Tahoma",12,FontStyle.Bold),Brushes.Black,new PointF(200,300));

    //畫圖例各項
    PointF boxOrigin = new PointF(210,330);
    PointF textOrigin = new PointF(235,326);
    float percent = 0;
    for(int i=0;i<dt.Rows.Count;i++)
    {
    g.FillRectangle(new SolidBrush(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") + "%)",new Font("Tahoma",10),Brushes.Black,textOrigin);
    boxOrigin.Y += 15;
    textOrigin.Y += 15;
    }
    //回收資源
    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 = 400;
    const int CHART_TOP = 75;
    const int CHART_HEIGHT = 200;
    const int CHART_LEFT = 50;
    const int CHART_WIDTH = 300;
    DataTable dt = chartData.Tables[0];

    //計算最高的點
    float highPoint = 0;
    foreach(DataRow dr in dt.Rows)
    {
    if(highPoint<Convert.ToSingle(dr[0]))
    {
    highPoint = Convert.ToSingle(dr[0]);
    }
    }
    //建立一個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,0,0,SIDE_LENGTH-1,SIDE_LENGTH-1);
    //畫大標題
    g.DrawString(title,new Font("Tahoma",14),Brushes.Black,new PointF(5,5));
    //畫小標題
    g.DrawString(subTitle,new Font("Tahoma",12),Brushes.Black,new PointF(7,35));
    //畫條形圖
    float barWidth = CHART_WIDTH / (dt.Rows.Count * 2);
    PointF barOrigin = new PointF(CHART_LEFT + (barWidth / 2),0);
    float barHeight = dt.Rows.Count;
    for(int i=0;i<dt.Rows.Count;i++)
    {
    barHeight = Convert.ToSingle(dt.Rows[i][0]) * 200 / highPoint * 1;
    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 * 2);
    }
    //設置邊
    g.DrawLine(new Pen(Color.Black,2),new Point(CHART_LEFT,CHART_TOP),new Point(CHART_LEFT,CHART_TOP + CHART_HEIGHT));
    g.DrawLine(new Pen(Color.Black,2),new Point(CHART_LEFT,CHART_TOP + CHART_HEIGHT),new Point(CHART_LEFT + CHART_WIDTH,CHART_TOP + CHART_HEIGHT));
    //畫圖例框和文字
    g.DrawRectangle(new Pen(Color.Black,1),200,300,199,99);
    g.DrawString("圖表說明",new Font("Tahoma",12,FontStyle.Bold),Brushes.Black,new PointF(200,300));

    //畫圖例
    PointF boxOrigin = new PointF(210,330);
    PointF textOrigin = new PointF(235,326);
    for(int i=0;i<dt.Rows.Count;i++)
    {
    g.FillRectangle(new SolidBrush(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(),new Font("Tahoma",10),Brushes.Black,textOrigin);
    boxOrigin.Y += 15;
    textOrigin.Y += 15;
    }
    //輸出圖形
    g.Dispose();
    return bm;
    }
    catch
    {
    return bm;
    }
    }
    }
    public class ChartUtil
    {
    public ChartUtil()
    {
    }
    public static Color GetChartItemColor(int itemIndex)
    {
    Color selectedColor;
    switch(itemIndex)
    {
    case 0:
    selectedColor = Color.Blue;
    break;
    case 1:
    selectedColor = Color.Red;
    break;
    case 2:
    selectedColor = Color.Yellow;
    break;
    case 3:
    selectedColor = Color.Purple;
    break;
    default:
    selectedColor = Color.Green;
    break;
    }
    return selectedColor;
    }
    }
    }
    以上是一個完整的WinForm中制作餅狀圖和柱狀圖源程序,大家可以通過以上程序的更改,做出能滿足自己程序的需要。

    原文轉自:http://www.kjueaiud.com

    評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>