You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 03:10:59