2017-05-11 17 views
-1

フォームにDataGridViewの空白の行を押すたびにプログラムが停止します。エラーは言う:DataGridviewでInvalidCastExceptionが処理されていません

InvalidCastException was unhandled.

これは、エラーが起こっているコードの一部です:

private void dataGridView1_Click(object sender, EventArgs e) 
{ 
    id = Convert.ToInt32(dataGridView1.SelectedCells[0].Value); //This is the line with the error 
    textBox1.Text = dataGridView1.SelectedCells[1].Value.ToString(); 
    textBox2.Text = dataGridView1.SelectedCells[2].Value.ToString(); 
    textBox3.Text = dataGridView1.SelectedCells[3].Value.ToString(); 
    textBox4.Text = dataGridView1.SelectedCells[4].Value.ToString(); 
} 
+0

あなたはDataGridViewのをクリックしたときにアプリケーションを起動したりするときに発生する問題ですか?これは、セルが数値ではなく、ヌルであり、選択された行がないためです。ヌルの場合、大文字小文字を処理するために "int?id"を試すことができます。また、フォームの構築中にメソッドに入ることがあり、datatGridView1.Rows.Count <= 0のときはクリックを無視する必要があります。 – jdweng

+0

'DataGridView'の空行をクリックするたびにエラーが表示されます。おそらく最後の行です。 'id'変数には' int'データ型があります。 @jdweng – StarBoy

+0

私が言ったように、変数型intを作ることができますか? Convert.ToInt32はエラーを出さない、またはdoe dataGridView1.SelectedCells == null、またはdataGridView1.SelectedCells [0] == null – jdweng

答えて

0

あなただけ言ったように:

program stop whenever i press the blank row

、その後、あなたが

id = Convert.ToInt32(dataGridView1.SelectedCells[0].Value); //This is the line with the error 

を持ってIntが値型で、nullにすることはできませんので、それは常に、失敗し、あなたは「とき空の行がある場合、このセルの値はおそらくnullになります。

try 
{ 
    id = Convert.ToInt32(dataGridView1.SelectedCells[0].Value); //This is the line with the error 
    textBox1.Text = dataGridView1.SelectedCells[1].Value.ToString(); 
    textBox2.Text = dataGridView1.SelectedCells[2].Value.ToString(); 
    textBox3.Text = dataGridView1.SelectedCells[3].Value.ToString(); 
    textBox4.Text = dataGridView1.SelectedCells[4].Value.ToString(); 
} 
catch(InvalidCastException exception) 
{ 
    // not much to do with it, you can display assign empty valuest to your text boxes or notify user that there's nothing to select 
} 

セルが値を持っている場合は、代替apporachをチェックすることができます

はこのような何かを試してみてください。

if(string.IsNullOrWhiteSpace(dataGridView1.SelectedCells[0].Value)) 
{ 
    return; 
} 

id = Convert.ToInt32(dataGridView1.SelectedCells[0].Value); 
//Assign values to textboxes 

そして、別の可能性もあります:

int id; 
if(int.TryParse(dataGridView1.SelectedCells[0].Value.ToString(), out id)) 
{ 
    //Assign values to textboxes 
} 
+0

あなたが作成した最初の解決策にはエラーがあります: ''e'という名前のローカル変数は、 '親または現在のスコープですでに使用されている' e 'とは異なる意味を与えるため、このスコープでは宣言できません – StarBoy

+0

右、あなたのEventArgsパラメータは 'e'として宣言されています。私はこれを更新します。 – yoger

+0

と2番目のInvalidCastExceptionがまだ処理されていません。私はまだそれを修正しようとしていますが、第3は2つのエラーを持っています..よく、それは悪い結末を言うことができます:) @ yoger – StarBoy

0

第1グリッドセルのデータ型とは何ですか?

変換しようとしている変数は、数値ではない文字や特殊文字のデータ型です。そのため、エラーが発生しています。数値以外の数値または非数値と数値の組み合わせを使用する場合は、convert.toString()メソッドを使用することをお勧めします。

+0

を 'id'に' int'データ型を使ってテストします。プログラムが 'id'変数に渡す値は、私のデータベースのナンバリングシステムにそれを使用している自動インクリメント番号です。 @mBangali – StarBoy

関連する問題