[ASP.NET] 讓下拉選項DropDonwList 預先選到資料庫內的內容 及 避免錯誤 Selected Null

[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(目標值));
就能輕鬆的做到 預選下拉選項的值跟避免錯誤,有趣嗎?下次在介紹有趣的給你知道。