2012-08-29 67 views
1

我的代码是这样的,我试图构建简单的练习题。我遇到了无法投射Combobox.SelectedValue

无效的转换异常。指定的演员无效。

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

+1

你有没有调试和检查哪些类型Combobox1.SelectedValue真的是? – Vale

+1

你可以显示如何初始化foo.bar.dataset.tables [0]? –

+0

@Vale:我试着搜索并发现Combobox.SelectedValue是对象类型,所以我不得不用长类型化它。 – mabus44

回答

8

也许这将帮助:

P2.Filter.Id = Convert.ToInt64(Combobox1.SelectedValue); 

根据您的意见,这可能帮助:

P2.Filter.Id = Convert.ToInt64((Combobox1.SelectedValue as DataRowView).Item[0]); 
+0

@ mabus44显然你的SelectedValue是一个“DataRowView”。你将不得不施放SelectedValue,然后获得你需要的物品。 – oopbase

2

我不知道为什么会发生这种情况,也许有人可以帮助我,但我宁愿去。

 P2.Filter.Id = Convert.ToInt64(Combobox1.SelectedValue); 

这对我来说总是适用于我,当我有这个问题。

+0

没有工作。无法投射“System.Data.DataRowView”类型的对象来键入“System.IConvertible”。 – mabus44

+0

@ mabus44看看我的答案,也许它有帮助 – oopbase

+0

@ mabus44你是怎么绑定的? –

1

将一个字符串投射到很长时间会造成错误投射。 SelectedValue应该返回一个字符串,需要Convert.ToLong来操作

+3

Convert.ToLong?从来没有听说过X之前的那个1) –

2

ComboBox.SelectedValue显然不是long。你应该做任何需要改变它的类型;最有可能,这将是

P2.Filter.Id = Convert.ToInt64(ComboBox1.SelectedValue); 
+0

没有解决。无法投射“System.Data.DataRowView”类型的对象来键入“System.IConvertible”。 – mabus44

1
Convert.ToInt64(Combobox1.SelectedValue) 
1

而是尝试像

Convert.ToInt64

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

在以后的某个阶段,你可能也想看看使用

Int64.TryParse Method

一个数字64位的字符串表示签署 整数相当于转换。返回值指示转换 是成功还是失败。

Int64.Parse Method

一个数字的字符串表示形式转换为它的64位带符号整数 等效。

1

转换前检查对象参照选定值

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]); 
} 
-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; 
+1

你可以改变自己的上述代码,我必须将组合框值转换为厚度类 – marut

+0

欢迎使用堆栈溢出!虽然这段代码可能会回答这个问题,但最好包含一些上下文,解释它是如何工作的,并说明何时使用它。从长远来看,仅有代码的答案是没有用的。 – ryanyuyu