2010-07-14 66 views
2

我發現了很多閃避此主題的帖子,但實際上沒有解決這種情況。當SelectedItem爲空時,對象綁定到Winforms組合框失敗

我有綁定到List<State>組合框,其中國家是具有縮寫和Name屬性業務對象:

this._stateComboBox.DataSource = ((Address)this._addressBindingSource.DataSource).States; 
this._stateComboBox.DisplayMember = "Abbreviation"; 
this._stateComboBox.DataBindings.Add(new System.Windows.Forms.Binding("SelectedItem", this._addressBindingSource, "State")); 

最初的組合框顯示空白,因爲沒有國家被選中。如果我標籤的組合框,並嘗試選項卡那樣,是的SelectedItem空,但我得到一個異常:

Object of type 'System.DBNull' cannot be converted to type 'State'.

任何想法,爲什麼BindingSource的似乎走的是空的SelectedItem並使其System.DBNull試圖將它分配給Address.State屬性之前?在我的狀態設置器被調用之前,這個異常發生在OnValidating中。沒有調試器,它看起來像焦點卡在組合框。

我不希望添加一個空的狀態對象到我的數據源與空的縮寫和名稱。我該如何解決這個問題?

回答

3

這是因爲控件驗證是Binding類的默認值。您可能需要將Binding.DataSourceUpdateMode屬性更改爲DataSourceUpdateMode.OnPropertyChanged,以便僅在用戶更改組合框選擇時分配值。

+0

這對我來說並不完美,但它確實給了我一個提示,讓我有一個解決方法: 當我創建Binding對象時,我現在設置DataSourceNullValue = null。雖然這可以讓我繞過異常,但不幸的是,我不能提交null的值。換句話說,如果我清除了我的控件的顯示值,則在驗證期間從綁定對象中檢索非null屬性值,而不是將綁定對象屬性設置爲null。 – Hadster 2010-08-23 19:28:38

+0

我一直在掙扎幾個小時,直到我找到這篇文章。謝謝! – 2012-12-27 22:31:01

+0

這可能是一個解決方法,但我想知道實際問題的答案。爲什麼會發生這種情況,null變成了DBNull,更重要的是如何阻止這種情況發生? – 2017-01-18 14:03:05