Winform——關於下拉框控件的相關問題


當使用Combobox控件時,出現SelectedValue的值為“System.Data.DataRowView”的原因有兩個:在Combobox的DataSource不為空的情況下,要么是沒有為ValueMember賦值,要么是賦值賦錯了,這兩種情況下系統就會把SelectedValue的默認值輸出來(如果DataSource為空,那么SelectedValue的值為null)。但有時即使你對ValueMember賦了正確的值也會出現這個問題,這里有一個賦值時機選擇的問題:

 

 DataSource在ValueMember之前賦值,先觸發SelectedValueChanged

再觸發SelectedIndexChanged,但獲取到的值都是“System.Data.DataRowView”;

此時把 DataSource賦值放最后:

當給ValueMember賦值時,會去觸發SelectedValueChanged,此時cboTabs.Text="",cboTabs.SelectedValue.ToString()引發異常

把cboTabs.SelectedValue.ToString()注釋后,繼續測試;當給ValueMember賦值時,只會觸發SelectedValueChanged;

當走到給DataSource賦值時,又一次觸發SelectedValueChanged,此時cboTabs.Text為正確值。

然后接着觸發SelectedIndexChanged,此時獲取的cboTabs.Text,cboTabs.SelectedValue.ToString()都是正確的。

 

再次把DataSource位置調整,放在DispalyMember之后,ValueMember之前。在給DataSource賦值時,觸發SelectedValueChanged,

此時cboTabs.Text取值正確,cboTabs.SelectedValue.ToString()=“System.Data.DataRowView”;接着觸發的SelectedIndexChanged,

取值也是一樣的;那么繼續接着往下跑,當給ValueMember賦值時,觸發了SelectedValueChanged,此時cboTabs.Text=“System.Data.DataRowView”,

而cboTabs.SelectedValue.ToString()取值正確。

 

由以上情況均在調試時發現,現總結出以下幾點:

1、給DataSource 進行賦值會觸先觸發SelectedValueChanged,再觸發SelectedIndexChanged;

    給DisplayMember進行賦值不會觸發SelectedValueChanged和SelectedIndexChanged;

    給ValueMember 進行賦值會觸發SelectedValueChanged,但不會觸發SelectedIndexChanged

2、使用SelectedValueChanged事件時,為避免SelectedValue.ToString()引發異常,DataSource賦值需在ValueMember之前

3、使用SelectedIndexChanged事件時,為避免第一次取值出現“System.Data.DataRowView”,DataSource賦值可在ValueMember之后

 

以上均是個人觀點,希望對大家有所幫助;如有錯誤,還望各位指出。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM