无法投射Combobox.SelectedValue

时间:2012-08-29 08:22:31

标签: c# .net winforms exception-handling casting

对于我想要构建的简单练习问题,我的代码就像这样。我遇到了

  

无效的投射例外。指定的演员表无效。

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对象?

8 个答案:

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

而是尝试像

这样的东西

Convert.ToInt64

  

将指定值转换为64位有符号整数。

稍后您可能还想看看使用

Int64.TryParse Method

  

将数字的字符串表示形式转换为64位有符号   整数当量。返回值表示是否转换   成功或失败。

Int64.Parse Method

  

将数字的字符串表示形式转换为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;