OUCC

BLOG

記事一覧 タグ一覧

DataGridView のセルのイベントの順番はどうなっているのか

投稿日:

この記事は OUCC Advent Calendar 2023 の14日目の記事です。空いていたので入れてみました。

DataGridView のセルのイベントの順番とは

Windows Forms のイベントの順番は Microsoft 公式ドキュメント に記載があります。 しかし、DataGridViewのセルのフォーカスなどの順番は記載がありません(自分は見つけられませんでした)

ここではセルの編集に関するイベントの順序について説明します。

セルに入るとき

セルに入るときのイベントの順序は以下のとおりです。

  1. CellBeginEdit
  2. CellClick(クリックしたときのみ)
  3. CellEnter

セルから出るとき

セルから出るときはいくつかのパターンがあります。

実際にDGVを使用する際はINotifyPropertyChangedを実装したモデルを使用することが多いと思うのでそちらも同時に記載しました。

普通の操作で出るとき

これにはクリック、Tab移動、dataGridView.Enabled = falseによる移動などが該当します。

  1. CellLeave
  2. CellValidating
  3. CellParsing
  4. Model.PropertyChanged
  5. CellValueChanged
  6. CellValidated
  7. CellEndEdit

Validate()で抜けるとき

ContainerControl.Validate()を直接呼び出した場合のイベントの順番です。(ContainerControlFormUserControlが継承しているのでDGVを置いているControlでthis.Validate()でアクセスできます)

  1. CellValidating
  2. CellParsing
  3. Model.PropertyChanged
  4. CellValueChanged
  5. CellValidated
  6. CellEndEdit

EndEdit()で抜けるとき

DataGridView.EndEdit()を直接呼び出した場合のイベントの順番です。

  1. CellParsing
  2. Model.PropertyChanged
  3. CellValueChanged
  4. CellEndEdit

このようにEndEdit()で抜けてしまうとバリデーションができないので、DGVの編集を終わらせたいときはEndEdit()を使うよりValidate()を使うほうが良いです。

参考サイト

DataGridView クラス (System.Windows.Forms)
カスタマイズ可能なグリッドにデータを表示します。
DataGridView クラス (System.Windows.Forms) favicon https://learn.microsoft.com/ja-jp/dotnet/api/system.windows.forms.datagridview
DataGridView クラス (System.Windows.Forms)