Y軸除了放統計值外,還能再加入一個識別ID嗎,比如產品代號或是人員代號等,這是我一開始在摸MSChart時的疑問,而這個答案現在是肯定的,它是可以的,而這次除了會在Y軸放入一個識別ID外,還會用這個ID來做Filter.
Y軸除了放統計值外,還能再加入一個識別ID嗎,比如產品代號或是人員代號等,這是我一開始在摸MSChart時的疑問,而這個答案現在是肯定的,它是可以的,而這次除了會在Y軸放入一個識別ID外,還會用這個ID來做Filter,而這個Filter也是MSChart本身就有的功能,接下來說開始拿這兩個部份開始.
首先,先來瞭解怎麼在YValueMember放入多個欄位,其實這個動作很簡單,我們只要在Series裡的YValueMembers輸入每個會用到的欄位來源名稱即可,而欄位間以逗號做分隔.
以這個例子來說,我的YValue除了要以DepQty來顯示統計圖表外,我還希望每個資料點還能存有DepID,這樣我在點下資料點時,同時還能知道它的ID是多少.
所以我在YValueMembers輸入 : DepQty,DepID
因為我們有兩個YValue,所以我們在YValuesPerPoint要改為2,這樣就完成設定動作了.
*第一個會是用來顯示統計圖的值,所以別把其它識別代號移到第一個.
這樣統計圖就能依DepQty顯示,而每個DataPoint還有DepID
那接下來,我們要怎麼應用這個DepID來做Filter,MSChart Control有幾個可以用,但這次我們將用一個自行定義的來做,這時會用到IDataPointFilter.
private class CustomFilter : IDataPointFilter
{
double val;
public CustomFilter(double CompareValue)
{
val = CompareValue;
}
public bool FilterDataPoint(DataPoint datapoint, Series series, int pointIndex)
{
return datapoint.YValues[1] == val;
}
}
第10行可以看到一點,我的datapoint.YValues是抓index=1的值,而不是0,因為0是DepQty,而1才是存放DepID,所以很容易的就知道,它是以陣列的方式在存.
完成了IDataPointFilter,接下來我們就要拿它來用,只要一行code就可以用了.
chart1.DataManipulator.Filter(new CustomFilter(Double.Parse(comboBox1.SelectedItem.ToString())), chart1.Series[0]);
第一個傳入值是我們要過濾的條件,而第二個則是我們要過濾的Series.
而這之前,我們要先瞭解兩個屬性,不然過濾出來的結過可能會跟你想像的不一樣.
DataManipulator.FilterMatchedPoints :
這個屬性的預設值是true,所以它在Filter後,統計圖上所會顯示的會是"不符合"我們條件的資料,這點跟我們在玩的DataView.RowFilter相反,所以要顯示的是符合條件的資料時,這個要記得設為false.
DataManipulator.FilterSetEmptyPoints :
預設值是false,所以不符合條件的,就會從圖表移除.
如果設為true,則會顯示全部.
其它還有一些Filter可以用,例如FilterTopN等,有機會再挖出來玩.
原始碼 :MSChartDemo.rar