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