#眉標=VS2008、、
#副標=體驗新一代整合開發環境(11)
#大標=統計圖表的開發與設計
#作者=文/圖 王寧疆
===<反灰>=============
================
===<反灰>=============
using System.Data;
using Wpf3DGraphingLibrary;
================
===<反灰>=============
public partial class PieChart : UserControl
{
PieGraph pg = null; //宣告PieGraph類別的變數
public void ClickPiece(int RowIndex) //模擬使用者點選統計圖表內容的方法
{
BaseGraphPiece piece = pg.Pieces[RowIndex]; //取得使用者點中的統計圖表區塊
pg.OnLeftClick(piece); //模擬點選指定的統計圖表區塊
}
public void TryAPieGraph(string[] CategoryName, decimal[] CategorySales) //負責繪製Pie圖表的方法
{
DataTable dt = new DataTable(); //建立DataTable類別的物件
dt.Columns.Add("CategoryName", typeof(string)); //加入名稱為CategoryName,型態為string欄位
dt.Columns.Add("CategorySales", typeof(decimal)); //加入名稱為CategorySales,型態為string欄位
for (int i = 0; i < CategoryName.Length; i++) //將業績資料加入到DataTable類別的物件中
{
DataRow dr = dt.NewRow(); //建立DataRow類別的物件
dr["CategoryName"] =
CategoryName[i]; //填入CategoryName欄位的內容值到新建立的DataRow類別的物件中
dr["CategorySales"] =
CategorySales[i]; //填入CategorySales欄位的內容值到新建立的DataRow類別的物件中
dt.Rows.Add(dr); //將新建立的DataRow加入到DataTable中
}
pg = new PieGraph(dt, Colors.BurlyWood, new TimeSpan(0, 0, 0, 0, 500));//建立PieGraph類別的物件
pg.LeftClicked +=
new GraphActionDelegate(pg_LeftClicked); //處理PieGraph類別的物件的LeftClicked事件
pg.MouseOver +=
new GraphActionDelegate(pg_MouseOver); //處理PieGraph類別的物件的MouseOver事件
pg.LeftClickAction=PieGraphUserActions.Focus; //設定統計圖表內容被使用者點中時欲呈現的效果
pg.MouseOverAction=
PieGraphUserActions.Highlight; //設定滑鼠停駐在統計圖表內容時欲呈現的效果
Viewport3D v = pg.Initialize(); //建立ViewPort3D類別的物件
v.Name = "PieGraph1"; //設定ViewPort3D類別的物件的名稱
Grid.SetColumn(v, 0); //將ViewPort3D類別的物件放在第1欄位的位置
Grid.SetRow(v, 1); //將ViewPort3D類別的物件放在第2列的位置
ChartGrid.Children.Add(v); //將ViewPort3D類別的物件加入到名稱為ChartGrid的Grid控制項中
Grid.SetColumn(lbData, 0); //將名稱為lbData的Label控制項放在第1欄位的位置
Grid.SetRow(lbData, 0); //將名稱為lbData的Label控制項放在第1列的位置
lbData.Content = ""; //將名稱為lbData的Label控制項顯示的文字設定成空字串
}
}
================
===<反灰>=============
void pg_LeftClicked(BaseGraph sender, object key, object value)
{
pg_MouseOver(sender, key, value); //呼叫pg_MouseOver事件處理程序
}
================
===<反灰>=============
void pg_MouseOver(BaseGraph sender, object key, object value)
{
lbData.Content = String.Format("產品種類 : {0}\n營業額 : {1}", key,
decimal.Parse(value.ToString()).ToString("C")); //將業績資料顯示到XAML文件上的Label控制項
}
================
===<反灰>=============
private void Form1_Load(object sender, EventArgs e)
{
// TODO: 這行程式碼會將資料載入 'northwindDataSet.Category_Sales_for_1997' 資料表。你可以視需要//進行移動或移除。
this.category_Sales_for_1997TableAdapter.Fill(
this.northwindDataSet.Category_Sales_for_1997); //查詢存放在檢視表中的業績資料
string[] NameArray = new string[
nORTHWINDDataSet.Category_Sales_for_1997.Rows.Count]; //建立存放商品資料的陣列
decimal[] ValueArray = new decimal[
nORTHWINDDataSet.Category_Sales_for_1997.Rows.Count]; //建立存放銷售數據的陣列
int i = 0; //宣告存放記綠編號的變數
foreach(NORTHWINDDataSet.Category_Sales_for_1997Row dr in
nORTHWINDDataSet.Category_Sales_for_1997.Rows) //取出所有的銷售資料
{
NameArray[i] = dr.CategoryName; //將商品資料加入到NameArray陣列
ValueArray[i] = dr.CategorySales; //將銷售數據加入到ValueArray陣列
i++; //遞增存放記綠編號的變數的內容值
}
pieChart1.TryAPieGraph(NameArray, ValueArray); //將準備好的陣列顯示成WPF統計圖表
category_Sales_for_1997BindingSource.PositionChanged += new EventHandler(
category_Sales_for_1997BindingSource_PositionChanged); //處理事件
}
================
===<反灰>=============
private void category_Sales_for_1997BindingSource_PositionChanged(object sender, EventArgs e)
{
pieChart1.ClickPiece(
category_Sales_for_1997BindingSource.Position);
//呼叫pieChart1物件的ClickPiece方法,模擬//統計圖表內容被使用者點選的操作
}
================