2009年4月6日

MS Chart Control 製作學生成績表

雖然坎尼在Chart Control出來時就裝好了元件,卻一直沒去測試這個新元件
另外看到很多blog都說摸索有點瓶頸
坎尼也不敢任意踏入無止盡的研究迴圈中...

最近有遇到要畫統計圖表的功能
加上 Tech. Days 聽了章立民老師的 ChartControl 線上研討會
於是放棄以前 OWC 的方式,用新的 Chart Control 來看看

元件安裝請參考保哥的 介紹好用元件:Microsoft Chart Controls for .NET 3.5
sample 檔一定要下載回來看,有很多 code 可參考

下圖是坎尼做的 sample -- 學生成績表
此表的特性為:
  • Y軸為自訂Label
  • X軸的學生名稱為直向
  • 長條圖上有分數顯示
  • 低於60分的人以紅色顯示成績條


這個表怎麼做的呢?
請先在頁面上放置個 Chart Control (如下圖)

接著用屬性 Panel 設定圖層的一些資料
但 Chart Control 可以用的屬性實在太多太雜了
坎尼也研究了半天才了解一些實用的屬性在哪設定
下圖為已經設定好的屬性 source code,下面會有解釋

Label 表示長條上要顯示的資料,#VAL表Y軸的值 (這邊是成績)

AxisY 為Y軸屬性,坎尼設定了 Maximum 為 100,表示最多顯示到 100
此項屬性不設定則 .NET 會自動控制 Y 軸的顯示值

接著是 CustomLabels,這邊自訂了 Y軸的標籤
這裡的重點是 ToPosition 屬性要設定,否則自訂標籤不會出現

AxisX 就是X軸屬性啦
這邊設定了 Interval=1,表示X軸上的所有標籤都會顯示
(預設為 Auto .NET會自動分配區間給 X 軸)
但 Label 的顯示會是橫向,自定義區間為1會造成標籤都擠在一起
待會兒坎尼會在後端的Code做點小處理

再來就是很重要的 DataBind 事件了

其實在 MS Chart Control 的論譠上有講到
要用 Chart 的第一步就是先 DataBind,看資料是否能正常顯示
再去設定顯示的樣式
坎尼為了容易理解,這裡就反過來講

可以看到 Chart 的 DataBind 方式不太一樣
給了第一個參數為 DataSource 接著是 x 及 y 軸的 DataMember
其實它也是可以支援
Chart1.DataSource = dt;
Chart1.DataBind();

DataBind之後就來處理顯示的樣式吧
剛剛有提到字會重疊在一起
於是坎尼把 X 軸的 Label 取出來加工,讓它變成直向
然後把 Y值小於60的長條變成紅色
如此一來,不及格的學生就一目瞭然
實際畫面會是第一張圖所顯示的那樣

其實 Code 不會寫很多
比較容易卡住的是一些前端屬性的設定
以後有空坎尼也來寫一下 Chart Control 的應用吧
大家有興趣可以上 MS Chart Control 的討論區

話說 snipping tool 的 highlighter 很好用
圖片中的黃底色都是用它來畫的

沒有留言:

Google Spreadsheet 裡用規則運算式

最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D