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.
相关产品推荐
相关产品推荐

