質問

If DataGridView1.CurrentRow.IsNewRow = False Then
'処理を記述
End If

というコードを書いているのですが、
新規行を選択しているにもかかわらず、IsNewRowプロパティがFalseとなってしまいます。
原因として考えられる事がありましたら、ご教授願います。

通報する

回答 (2件)

No.1です。
状況としては、Button1_Clickの前に何らかのイベントでCurrentCell.RowIndexが-1されていると思うので、DataGridView1の他のイベントで書き換えていませんか?
例えば DataGridView1_LostFocusなどで。
またはDataGridView1_CellLeaveでセルがフォーカスを失った所にブレークポイントを入れて、トレースしてみてはどうでしょうか?

この回答へのお礼

回答ありがとうございます。

記載していただいた通り、DataGridViewから呼び出されるイベントに全てブレークポイントを置いてみましたが、特に何か影響を及ぼしている箇所は見つけられず。。
選択行を削除したい機能でしたので、
IsNewRowプロパティはあきらめて、
ClickイベントやKeyPressイベントが押された時に選択行を保存して、削除ボタンを押した時に、選択されていた行がMaxRows-1の値かどうかを調べて新規行かどうかを判断することにしました。

ご回答、ありがとうございました

>If DataGridView1.CurrentRow.IsNewRow = False Then
>'処理を記述
>End If
で、
>新規行を選択しているにもかかわらず、IsNewRowプロパティがFalseとなってしまいます。
と言う事は、新規行を選択していても「'処理を記述」の処理をしてしまうという事でしょうか?
前後が分からないのですが、もしかしたら予期しないイベントでIsNewRow=Faldeの状態でそこを通ってしまうのかもしれないので、If行にブレークポイントを設定するか、
If DataGridView1.CurrentRow.IsNewRow = False Then
Debug.Print("IsNewRow = False")
'処理を記述
Else
Debug.Print("IsNewRow = True")
End If
とかにして、そこをどのように通過したかを調べてみてはどうでしょうか?
1度はTrueで通って、その後Falseで再び通過するような事は無いでしょうか?

この回答への補足

回答ありがとうございます。

>と言う事は、新規行を選択していても「'処理を記述」の処理をしてしまうという事でしょうか?
はい、その通りです。

補足しますと、
DataGridViewの新規行を選択した状態で、
コマンドボタンクリックのイベントを発生させます。

すると、新規行を選択しているにもかかわらず、IsNewRowがFalseとなっています。
また、CurrentCell.RowIndexが「新規行-1」の値を出しています。
(本来の新規行のRowIndexが5ならば、4が返ってきます)

以下のコードのように、選択した行をDataGridView上から削除する処理を記述しているのですが、新規行を選択していた場合、新規行の前の行が削除されてしまいます。
Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click

If DataGridView1.CurrentRow.IsNewRow = False Then
DataGridView1.Rows.RemoveAt(DataGridView1.CurrentCell.RowIndex)
End If

End Sub

ボタンクリックイベントが実行された直後から1行ずつ実行して試してみましたが、IsNewRowは最初からFalseとなっています。

このQ&Aは役に立ちましたか?0 件

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

新しく質問する

新しく質問する

このカテゴリの人気Q&Aランキング

毎日見よう!教えて!gooトゥディ

べんりQ&A特集