无法在列表框中访问所选值

时间:2014-08-21 09:49:07

标签: c# winforms selectedvalue

我已经将列表分配给列表框,并设置了它的显示和值成员

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; }
}

1 个答案:

答案 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;