对于我想要构建的简单练习问题,我的代码就像这样。我遇到了
无效的投射例外。指定的演员表无效。
public Form1()
{
Combobox1.Datasource = foo.bar.dataset.tables[0];
Combobox1.DisplayMember = "Name";
Combobox1.ValueMember = "ID";
}
private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
NewClass P2 = new NewClass;
P2.Filter.Id = (long)Combobox1.SelectedValue;
}
任何人都可以告诉我为什么会发生这种情况以及如何解决它,即使我有类型化的Combobox1.SelectedValue对象?
答案 0 :(得分:8)
也许这会有所帮助:
P2.Filter.Id = Convert.ToInt64(Combobox1.SelectedValue);
根据您的评论,这可能有所帮助:
P2.Filter.Id = Convert.ToInt64((Combobox1.SelectedValue as DataRowView).Item[0]);
答案 1 :(得分:2)
我不确定为什么会这样,也许有人可以帮助我,但我更愿意去。
P2.Filter.Id = Convert.ToInt64(Combobox1.SelectedValue);
当我遇到这个问题时,这总是对我有用。
答案 2 :(得分:2)
ComboBox.SelectedValue
显然不是long
。你应该做任何改变其类型的事情;最有可能是
P2.Filter.Id = Convert.ToInt64(ComboBox1.SelectedValue);
答案 3 :(得分:1)
将字符串转换为long是错误的。 SelectedValue应该返回一个需要Convert.ToLong才能在
上运行的字符串答案 4 :(得分:1)
Convert.ToInt64(Combobox1.SelectedValue)
答案 5 :(得分:1)
而是尝试像
这样的东西将指定值转换为64位有符号整数。
稍后您可能还想看看使用
将数字的字符串表示形式转换为64位有符号 整数当量。返回值表示是否转换 成功或失败。
将数字的字符串表示形式转换为64位有符号 等价整数。
答案 6 :(得分:1)
在投射 SelectedValue 之前检查对象参考。
long value=0l;
if (comboBox1.SelectedValue != null)
{
value=long.Parse(comboBox1.SelectedValue.ToString());
}
您可以使用 SelectedItem 属性,该属性将返回DataRowView
(行)的引用。
DataRowView row = comboBox1.SelectedItem as DataRowView ;
if (row != null){
MessageBox.Show("value " + row[0] + " " + row[1]);
}
答案 7 :(得分:-1)
Thickness t = new Thickness(0);
if (value != null)
{
t= new Thickness(System.Convert.ToInt64(((System.Windows.Controls.ComboBoxItem)value).GetValue(System.Windows.Controls.ComboBoxItem.ContentProperty)));
}
return t;