C#中设置SelectedValue为原值时SelectedItem为何变为null?
问题分析与解决
你的代码中,首次输出SelectedValue为1是因为数据源默认选中了第一项(其Id恰好为1),但手动设置SelectedValue = 1后SelectedItem变为null报错,核心原因是类型不匹配:ComboBox的SelectedValue匹配要求赋值的类型与数据源中Id的实际类型完全一致。
解决方案
1. 匹配Id的实际类型赋值
先确认OrganizacionaJedinica.Id的类型:
- 如果是
int?(可空整数),赋值时用(int?)1 - 如果是
long,赋值时用1L
示例:
// 假设Id是int?类型 cmbOrganizacionaJedinica.SelectedValue = (int?)1;
2. 直接赋值SelectedItem(更稳妥)
从数据源中找到目标项,直接设置SelectedItem,完全避免类型问题:
var orgJedinica = vratiOJ().FirstOrDefault(oj => oj.Id == 1); if (orgJedinica != null) { cmbOrganizacionaJedinica.SelectedItem = orgJedinica; Debug.WriteLine(orgJedinica.Naziv); }
3. 动态转换类型赋值
如果不确定Id的类型,可以通过转换确保类型一致:
var firstItem = vratiOJ().First(); var targetValue = Convert.ChangeType(1, firstItem.Id.GetType()); cmbOrganizacionaJedinica.SelectedValue = targetValue;
原因说明
ComboBox的SelectedValue匹配逻辑是严格的类型相等比较,即使数值相同但类型不同(比如int和int?、int和long),也无法找到对应的数据源项,最终导致SelectedItem变为null并引发空引用异常。
内容的提问来源于stack exchange,提问作者Mike Lol
相关产品推荐
相关产品推荐

