• 締切済み

VB.NET DataGridViewでIsNewRowが正しく判定されない

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

みんなの回答

  • hotosys
  • ベストアンサー率67% (97/143)
回答No.2

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

guccyonn
質問者

お礼

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

  • hotosys
  • ベストアンサー率67% (97/143)
回答No.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で再び通過するような事は無いでしょうか?

guccyonn
質問者

補足

回答ありがとうございます。 >と言う事は、新規行を選択していても「'処理を記述」の処理をしてしまうという事でしょうか? はい、その通りです。 補足しますと、 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

専門家に質問してみよう