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

文字列をlongにキャストすると、キャストが正しくなくなります。SelectedValueは、操作するためにConvert.ToLongを必要とする文字列を返すことになっています

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

むしろ次のようなものを試してください

Convert.ToInt64

指定された値を64ビットの符号付き整数に変換します。

後の段階で、使用方法も確認することをお勧めします

Int64.TryParseメソッド

数値の文字列表現を、同等の64ビット符号付き整数に変換します。戻り値は、変換が成功したか失敗したかを示します。

またはInt64.Parseメソッド

数値の文字列表現を、同等の64ビット符号付き整数に変換します。

于 2012-08-29T08:25:45.677 に答える
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
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 に答える