我已经将列表分配给列表框,并设置了它的显示和值成员
BTLtypeList.DataSource = InStore_operations.ActivationTypes;
BTLtypeList.DisplayMember = "Name";
BTLtypeList.ValueMember = "Id";
然后在某些时候我需要访问此ListBox的选定值(ValueMember)。我希望它能像这样工作:
(byte)BTLtypeList.SelectedValue
但是它显示了InvalidCastException(当在调试器中我将鼠标移到SelectedValue上时 - 我看到所选的是ActivationType实例而不是它的Id值
然后我就这样试了
((ActivationType)BTLtypeList.SelectedValue).Id
我再次得到InvalidCastException(现在调试器显示SelectedValue是所需的Id值)
P.S。 ActivationType是{byte Id,string Name}
这可能是什么问题?
1)InvalidCastException消息为"指定的强制转换无效"
2)这里是课程定义,虽然我猜这里没有附加值:
public class ActivationType
{
public byte Id { get; set; }
public string Name { get; set; }
}
答案 0 :(得分:1)
想出来:
在<{em> DataSource
之前设置ValueMember
将在设置SelectedIndexChanged
之前触发ValueMember
。在将ValueMember
设置为DataSource项类型的实际成员之前,SelectedValue
将返回DataSource项对象本身。
换句话说,要修复此错误,您只需更改
即可BTLtypeList.DataSource = InStore_operations.ActivationTypes;
BTLtypeList.DisplayMember = "Name";
BTLtypeList.ValueMember = "Id";
到
BTLtypeList.DisplayMember = "Name";
BTLtypeList.ValueMember = "Id";
BTLtypeList.DataSource = InStore_operations.ActivationTypes;