[ASP.NET] 讓下拉選項DropDonwList 預先選到資料庫內的內容 及 避免錯誤 Selected Null
這個設定的情境是,一開始DropDownList的資料來源可以直接連到某個資料表 SELECT 行政區郵遞區號 FROM 地址
所以產生出類似下面這樣的HTML到前端
1: <select name="ddlCount" id="ddlCount">
2: <option value="0">請選擇</option>
3: <option value="5">5</option>
4: <option value="10">10</option>
5: <option value="15">15</option>
6: <option value="20">20</option>
7: <option value="25">25</option>
8: <option value="30">30</option>
9: <option value="35">35</option>
10:
11: </select>
當他儲存他所選的 15 ,這時資料庫就會有記錄住,他有 15 這個值,
若是希望下次他進來的時候就先預先選到他上次所選的內容,
就直接在 DropDownList 的 DataBind() 後 的程式碼 加上
// iGoal 為上次選到的數字 假設是 15 ddlCount.Items.FindByValue(iGoal.ToString()).Selected = true;
只要使用簡單的 FindByValue(目標值).Selected = true 就可以達成預選。
但有一種可能當你存進去的值可能不在目前的ListItem裡面,你還是直接用
上面這段程式碼來處理,那就會發生 錯誤訊息 (以9這個數字來測試我們的範例)
並未將物件參考設定為物件的執行個體
行 69: ddlCount.Items.FindByValue("9").Selected = true;
那該怎麼避免呢?其實很簡單,換各方式就可以,只需要將程式改成
ddlCount.SelectedIndex = ddlCount.Items.IndexOf(ddlCount.Items.FindByValue("9"));
就能夠避免這樣的錯誤,怎麼說呢,把Code分兩段來看,第一段 FindByBalue("9") 這段執行後,
是會回傳 null (因為沒找到這個 ItemList)
所以第二段 ddlCount.Items.IndexOf(等於找一個Null ItemList) 會傳回 -1
所以 ddlCount.SelectedIndex = -1 就是沒預選。
所以使用這段
ddlCount.SelectedIndex = ddlCount.Items.IndexOf(ddlCount.Items.FindByValue(目標值));
就能輕鬆的做到 預選下拉選項的值跟避免錯誤,有趣嗎?下次在介紹有趣的給你知道。