緣起:
我回到公司不久後,被拉入一個新的案子裡,在四月底前有一個功能要完成,今天有把它給完成了,不過還沒驗收就是了。我在這個任務裡學到了 CheckBoxList 跟 Enum 的一些用法,所以想寫個文章記錄。
(想不到有什麼圖片能放,但又不想讓這區太空白.....
程式需求:
這篇的例子是簡化過的,但案子上實際的需求也沒比這個難很多就是了。專案的架構長這樣,我只是開一個新的 WebForm 專案,然後加入一個 Class 跟 WebForm。
那個 BirdshiuObject.cs 裡面是長這樣
這樣設計的用意是,資料要存起來的話,資料表就只需要開兩個欄位,一個是紀錄 DataType,另一個是記錄對應的 Enum 的值 (那欄位就先叫 TypeValue)。舉例,有筆資料 DataType=1, TypeValue=3,從 DataType 可以知道這筆資料是指 "水果",去找 FruitEnum,然後從 TypeValue=3 可以知道對應的水果是西瓜。大概是這樣。
我的任務就是為每個除了 DataType 外的 Enum,依它們有的值動態產生 CheckBox。因為是動態產生的,所以之後如果要擴充選項,只要在對應的 Enum 裡依序加入就行,擴充就變得比較方便。
CheckBoxList:
需要動態產生 CheckBox 的話,可以使用 CheckBoxList 來管理一群的 CheckBox。在 CheckBoxListTest.aspx 跟 CheckBoxListTest.aspx.cs 裡分別寫這些程式。
![]() |
CheckBoxListTest.aspx |
![]() |
CheckBoxListTest.aspx.cs |
執行程式後可以看到....
CheckBoxList 的 item 可以拿到裡面的 CheckBox Collection,再用 Add(string) 方法能加入一個 CheckBox,那個 CheckBox 對應的 label 跟 value 都會是你傳入的 string 參數。
如果不想要 CheckBoxList 一列就只有一個 CheckBox,可以指定它的 RepeatColumns 屬性。我把它們兩個都改成 2 會像這樣
Enum:
這邊會用到的方法有 Enum 的 GetName、GetValues,可以取得 Enum 的常數名稱、常數值的陣列。我把 CheckBoxList 綁定 Enum 的程式寫成一個 method,寫在 CheckBoxListTest.aspx.cs 裡,傳入的參數有 CheckBoxList 跟 BirdshiuObject.DataType
然後 PageLoad 那邊....
那個 BindCheckBoxList method 還可以改得再更精簡些,把重複的部份拿出來,並用額外的 Type 與 Array 變數來輔助。
取得選取結果:
在 CheckBoxListTest.aspx 裡面加入一個 Button 跟 Label
CheckBoxListTest.aspx.cs 加入一個 GetChkListValue method,裡面一樣傳入 CheckBoxList 跟 BirdshiuObject.DataType
最後是 Button 的點擊事件,把結果字串結合起來。
沒有留言:
張貼留言