有些時候總是需要做出從資料庫讀取資料產生選項做複選,並且記錄至資料庫
當然使用的是CheckBox,但是要與資料庫做連線使用CheckBoxList可以方便DataBind
但是卻同時遇到提供的屬性無法滿足我,居然無法直接取出所有值!!!
測試一下發現真的只能取出單一的值...
當然可以手動寫一段程式碼(超麻煩):
StringBuilder sb = new StringBuilder();
for (int i = 0; i < CheckBoxList1.Items.Count; i++)
{
if (CheckBoxList1.Items[i].Selected)
{
sb.Append(CheckBoxList1.Items[i].Value.Trim() + ",");
}
}
sb = sb.Remove(sb.Length-1,1);
Label1.Text = sb.ToString();
雖然順利可以取出,但另一個問題是沒辦法直接設定....
又要寫一大堆程式碼超不方便!!!!(一樣要利用迴圈自行比對每一項的內容後再做修改)
實在是太不順心,可能我能力不足或不想寫如此多重複性很高卻又效益很不好的Code
(感覺就應該有更好的方法才對啊....真的是感覺!!)
所以我決定再次上網尋找前輩求助
[ASP.NET 自訂控制項]CheckBoxList複選的SelectedValue,用逗號串接
可以看到自訂的控制項是先繼承WebControl基底類別
進行擴充或者覆寫需要的功能!
這個新的JoeyCheckBoxlist就是覆寫SelectedValue的取用與設定的方法
改為可以用字串"1,2,3"的方式直接設定對應的Value並且忽略不合理的Value
接著在設計頁面的設置一下:
<%@ Register Assembly="WebApplication3" Namespace="WebApplication3" TagPrefix="test" %>
要設定對應的命名空間,應用程式集(通常都是專案本身的名稱)與要使用的標籤
記得先建置一下專案,這樣才會被載入辨識,就可以看到:
測試一下!
Label1.Text = JCheckBoxlist.SelectedValue;
這樣要做資料的設定與取值就變得非常簡單了!!!
不對不對!!!重點是要放在觀察前輩的範例並學習如何自訂控制項
畢竟不會總是有別人的可以使用與參考,
透過範本是希望能親身體驗與幫助學習,
等到真正需要時自己也能有解決問題的能力!