#眉標=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方法,模擬//統計圖表內容被使用者點選的操作 } ================