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

Entity Framework中Combobox选值赋值TextBox遇InvalidCastException错误

问题解决:无法将Treatment对象转换为String类型

错误翻译

System.InvalidCastException: 无法将类型为‘NetStok.Entities.Table.Treatment’的对象转换为类型‘System.String’

问题原因

你的ComboBox绑定的是完整的Treatment实体对象,而非单独的TedaviAdi字符串。因此cmbTedavi.SelectedValue返回的是Treatment实例,强行将其转换为string就会触发类型转换异常。

解决方法

方法1:直接从选中的实体获取价格(推荐,无需重复查询数据库)

既然ComboBox里的项是Treatment对象,直接将SelectedItem转为对应类型后读取价格字段:

if (cmbTedavi.SelectedItem is Treatment selectedTreatment)
{
    txtTedaviUcreti.Text = selectedTreatment.TedaviUcreti.ToString();
}

方法2:修正ComboBox绑定的ValueMember

如果坚持要通过TedaviAdi查询数据库,先在绑定时指定ValueMember为TedaviAdi:

// 绑定ComboBox时补充以下设置
cmbTedavi.DataSource = context.Tedaviler.ToList();
cmbTedavi.DisplayMember = "TedaviAdi"; // 界面显示的文本
cmbTedavi.ValueMember = "TedaviAdi"; // 将TedaviAdi设为SelectedValue的值

然后修改查询代码(记得加空判断,避免空引用):

var selectedAdi = cmbTedavi.SelectedValue as string;
if (!string.IsNullOrEmpty(selectedAdi))
{
    var treatment = context.Tedaviler.FirstOrDefault(x => x.TedaviAdi == selectedAdi);
    if (treatment != null)
    {
        txtTedaviUcreti.Text = treatment.TedaviUcreti.ToString();
    }
}

方法3:从SelectedItem提取TedaviAdi后查询

如果不想修改绑定逻辑,也可以从选中的实体里提取TedaviAdi再查询:

if (cmbTedavi.SelectedItem is Treatment selectedTreatment)
{
    var treatment = context.Tedaviler.FirstOrDefault(x => x.TedaviAdi == selectedTreatment.TedaviAdi);
    if (treatment != null)
    {
        txtTedaviUcreti.Text = treatment.TedaviUcreti.ToString();
    }
}

内容的提问来源于stack exchange,提问作者Burhan Kes.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 19:35:31