2

对于我正在尝试构建的简单练习问题,我的代码是这样的。我遇到

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

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 对象进行了类型转换?

4

8 回答 8

8

也许这会有所帮助:

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

根据您的评论,这可能会有所帮助:

P2.Filter.Id = Convert.ToInt64((Combobox1.SelectedValue as DataRowView).Item[0]);
于 2012-08-29T08:25:32.527 回答
2

我不确定为什么会发生这种情况,也许有人可以帮助我,但我更愿意去。

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

当我遇到这个问题时,这总是对我有用。

于 2012-08-29T08:24:33.367 回答
2

ComboBox.SelectedValue显然不是一个long。你应该做任何需要改变它的类型;这很可能是

P2.Filter.Id = Convert.ToInt64(ComboBox1.SelectedValue);
于 2012-08-29T08:24:59.880 回答
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]);
 }
于 2012-08-29T08:31:51.453 回答
1

将字符串转换为 long 是错误转换。SelectedValue 应该返回一个需要 Convert.ToLong 操作的字符串

于 2012-08-29T08:24:44.897 回答
1
Convert.ToInt64(Combobox1.SelectedValue)
于 2012-08-29T08:25:29.093 回答
1

而是尝试类似的东西

转换.ToInt64

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

在稍后的某个阶段,您可能还想看看使用

Int64.TryParse 方法

将数字的字符串表示形式转换为其等效的 64 位有符号整数。返回值指示转换是成功还是失败。

Int64.Parse 方法

将数字的字符串表示形式转换为其等效的 64 位有符号整数。

于 2012-08-29T08:25:45.677 回答
-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;
于 2015-08-26T14:23:03.413 回答