2012/05/31

.NET データグリッドで行が追加できないと思ったら。。

以下のようにデータグリッドに行を追加するコードを書いてもどうしても Rows.Add() のところで落ちてしまうという現象に遭遇。

Dim iId as Integer = DataGridView1.Rows.Add()
DataGridView1.Rows(iId).Cells("ColumnA").Value = "AAAA"
.....

いろいろプロパティを変えてみたが解決されず、AllowUserToAddRows = false になっていたので、これをtrueにしたら、上記のコードをすべてコメントアウトしてもデータグリッドビューを描画しようとする時点でエラーで落ちてしまう。

原因を探っていたら、CurrentCellChangedイベントの処理が記述されているのでデータグリッドに列を追加するときにこのイベントが発生していることがわかった。

その中で DataGridView1.CurrentRow().Index を取ろうとしていたところで落ちていたことが判明。

If DataGridViewTani.CurrentRow() Is Nothing Then Return End If dim iCurrentRowIdx as Integer = DataGridViewTani.CurrentRow().Index 'ここで落ちてた dim strTmp as String = DataGridViewTani.Rows(iCurrentRowIdx).Cells("ColumnA").Value


CurrentCellChangedイベント処理内を以下のように修正したら正常に行が追加されるようになった。

If DataGridViewTani.CurrentRow() Is Nothing Then Return End If dim iCurrentRowIdx as Integer = DataGridViewTani.CurrentRow().Index 'これを追加 If iCurrentRowIdx > 0 Then dim strTmp as String = _ DataGridViewTani.Rows(iCurrentRowIdx).Cells("ColumnA").Value End If

イベント処理は全部チェックしましょう。。