餅狀圖|柱狀圖 當我們的軟體需要各種餅狀圖和柱狀圖來表示資料時,我們或許會想到用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;
//畫橫條圖
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;