2011-10-25 11 views
-1

私はDataGridViewをいくつかのWebメソッドを使用して設定するwebserviceを持っています。DataGridView null参照例外

このコードがないとすばらしいことですが、選択した行に応じて画像を変更する必要があり、画像の名前は変更されない静的な列になります。

私のやっていることは、私のウェブメソッドでは、picture1.jpgに等しい画像名を送信することです。私はこのコードを使用していますWindowsアプリケーションで

int i; 
i = memdataGV.SelectedCells[0].RowIndex; 
var pictext = memdataGV.Rows[i].Cells[5].Value.ToString(); 
pictureBox1.ImageLocation = "C:\\Pictures\\" + pictext; 

DataGridViewが最初に移入すると、すべてが正常に動作しますが、私は私のボタンイベントのいずれかをクリックしたときに、それが次の行に例外をスロー:

var pictext = memdataGV.Rows[i].Cells[5].Value.ToString(); 

とNullReferenceExceptionは、未処理だった

コードをデバッグしようとしましたが、先頭にifというステートメントを追加しましたが、修正していないようです。

+0

一度に1行だけを選択していますか?または複数ですか? – curtisk

+0

一度に複数の行が無効にされる – Tim

+0

(memdataGV.SelectedRows.Count> 0)を追加しようとしましたが、それは助けにはならないと思われます。 – Tim

答えて

-1

は、インデックス5はnullを返した何らかの理由でそれを考え出したし、セルの値がありました。だから、値を見つけたカラム名で値を取得するコードを実行しました。

string pictext = Convert.ToString(selectedRow.Cells["PHOTOID"].Value) 
2

三つの可能性:

  1. iは、(例えば、-1)不正な値を持つ細胞で
  2. ValueあなたがアップToString()打撃を呼び出すようにするとき[5] NULLです。
  3. Cells[5]は存在しません。 I.たとえば、4のような別のインデックスかもしれません。インデックスはゼロベースです。覚えておいてください。

はあなたのコメントをもとに、あなたに行を変更:

var pictext = memdataGV.Rows[i].Cells[5].Value==null?string.empty:memdataGV.Rows[i].Cells[5].V‌​alue.ToString(); 
+0

エラーが出ないと言ったように4に設定しましたが、ピクチャ名はセル5にあります。ボタンをクリックすると、DataGridviewの背面に3行追加されますが、ピクチャ名はセル番号5に残ります。 – Tim

+0

インデックス番号として5を残してから離しても。 ToStringそれはあなたが言ったように爆破することはありませんが、私はToStringを離したときにどのようにこの問題を解決するのですか?私は新しい行を選択すると画像が表示されなくなります – Tim

+0

@JawaidAkhtar 'Cells [5]'を 'Cells [4]'に変換すると、実際に使用するインデックスであることを確認することをお勧めします。あなたは確かに知ることができる唯一の人です。 ToString()が問題を修正した場合は、代わりに以下のようにします: 'var pictext = memdataGV.Rows [i] .Cells [5] .Value == null?string.empty:memdataGV.Rows [i] .Cells [5]。 Value.ToString(); ' – Icarus