Q質問

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

というコードを書いているのですが、
新規行を選択しているにもかかわらず、IsNewRowプロパティが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となっています。

    No.1の回答に寄せられた補足コメントです。 補足日時:2009/05/28 19:41 通報する

A 回答 (2件)

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

この回答へのお礼

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

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

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

お礼日時:2009/06/04 15:08
    • good
    • 0

>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で再び通過するような事は無いでしょうか?

    • good
    • 0

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

新しく質問する

このQ&Aを見た人が検索しているワード


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

おすすめ情報