ComboBox使用自訂物件集合當DataSource並在DropDownStyle設為DropDown時的問題(WinForm)

  • 2610
  • 0

ComboBox使用自訂物件集合當DataSource並在DropDownStyle設為DropDown時的問題

先再特別提醒一下,這是Windows Form的元件,不是Web的

(這個問題若在DataSource為DataTable時,並不會有下面的問題)



使用者使用ComboBox的習慣是點出下拉單並"慢慢"輸入字串後按Enter(如圖,編號1),所以ComboBox理所當然要設DropDownStyle為DropDown,
可是當使用者的動作在按下Enter之後,ComboBox表面上看起來已經抓到輸入的值了(如圖,應該抓到編號2的項目),但是實際上並沒有,追蹤後的結果發現只有ComboBox的Text變成輸入的值,實際上並沒有改變SelectedIndex和SelectedValue。

看了一下事件並實際追蹤,應該是在DropDownClosed這個事件裡找出下拉選單內的項目並設為選取項目就好了。
結果第一次動作可以,第二次再動作...ComboBox抓到的Text竟然是上一次的Text?

哇哩咧...這下要怎麼解? 明明畫面上看到的就是乙,Text卻硬是抓到甲?

後來看到有個FormattingEnabled屬性:設為True,則用FormatString的值將DisplayMember的值轉換成可以顯示的值
看起來似乎是在告訴我,剛剛的Text抓錯是因為沒轉換的關係?

索性將它設為True之後,真的就解了...

可是我在MSDN只看到這兩行:
If FormattingEnabled is false, SelectedIndex will not be set to -1 when SelectedValue is blank.

If FormattingEnabled is true, SelectedIndex will be set to -1 when SelectedValue is blank.

完全沒提到使用自訂物件集合當DataSouce時,不設為True時,Text會抓到上一次的問題...