連載
» 2006年11月03日 05時00分 公開

.NET TIPS:DataGridViewコントロールで選択されている行やセルを調べるには?[2.0のみ、C#、VB]

[遠藤孝信,デジタルアドバンテージ]
「.NET TIPS」のインデックス

連載目次

 DataGridViewコントロールでは、グリッド上での行の追加/削除やセルの値の編集以外にも、現在選択されている行やセルに対して何らかの操作を行うことも多い。本稿ではこのような選択されている行やセルに関する処理についてまとめる。

 なお選択されている「列」についてはここでは割愛するが、以降の行について解説の中で登場するクラス名やプロパティ名の「Row」の部分を「Column」に置き換えたものを使用することで、列についても行と同等の操作が行える(例:SelectedRows→SelectedColumns)*

*ただし列のSortModeプロパティがAutomatic以外でないと列は選択できない


選択されているセルの取得 − SelectedCellsプロパティ

 現在選択されているセル(DataGridViewCellクラスのオブジェクト)は、DataGridViewコントロールのSelectedCellsプロパティから取得できる。グリッド上では複数個のセルを同時に選択できるため、このプロパティはセルのコレクション(DataGridViewSelectedCellCollectionクラスのオブジェクト)となっている。

 選択されている個々のセルについて操作する場合には、以下のようにして個々のセルを列挙することができる(以降では変数dgvはDataGridViewコントロールを参照しているものとする)。

foreach (DataGridViewCell cell in dgv.SelectedCells) {
  // 選択されている個々のセル「cell」についての処理
}

For Each cell As DataGridViewCell in dgv.SelectedCells
  ' 選択されている個々のセル「cell」についての処理
Next

現時選択されている個々のセルについての操作例(上:C#、下:VB)

 また、現在選択されているセルの個数は、コレクションのCountプロパティから取得できる。

dgv.SelectedCells.Count

 よって上記のコードは次のようにも記述できる。

for (int i = 0; i < dgv.SelectedCells.Count; i++) {
  // 選択されている個々のセル「dgv.SelectedCells[i]」についての処理
}

For i As Integer = 0 To dgv.SelectedCells.Count - 1
  ' 選択されている個々のセル「dgv.SelectedCells(i)」についての処理
Next

for文による個々の選択セルについての操作例(上:C#、下:VB)

 なお、DataGridViewコントロールのMultiSelectプロパティをfalseに設定することにより、ユーザーが複数の行(選択モードが行単位の場合*)やセルを選択できないようにできる。

選択されている行の取得 − SelectedRowsプロパティ

 DataGridViewコントロールでは、行ヘッダのセルをクリックすることにより行を選択できるが、このようにして選択された行(DataGridViewRowクラスのオブジェクト)のコレクションは、DataGridViewコントロールのSelectedRowsプロパティより取得できる。

foreach (DataGridViewRow row in dgv.SelectedRows) {
  // 選択されている個々の行「row」についての処理
}

For Each row As DataGridViewRow in dgv.SelectedRows
  ' 選択されている個々の行「row」についての処理
Next

現時選択されている個々の行についての操作例(上:C#、下:VB)

 セルの場合と同様に、選択されている行の個数は、

dgv.SelectedRows.Count

により取得できる。

 当然ながら、行が選択されている場合には、その行のすべてのセルはSelectedCellsプロパティに含まれている。

特定のセルが選択されているかどうかのチェック − セルのSelectedプロパティ

 特定のセルが現在選択されているかどうかを調べるには、セルのSelectedプロパティをチェックする。選択されていればtrue、されていなければfalseとなる。

 例えば、(x, y)の位置にあるセルが選択されているかどうかを知るには、

C#: dgv[x, y].Selected
VB: dgv(x, y).Selected

を調べればよい。

特定の行が選択されているかどうかのチェック − 行のSelectedプロパティ

 セルと同様に行にもSelectedプロパティがあり、その行が選択されているかどうかを調べることができる。n行目のセルの選択状態は、

C#: dgv.Rows[n].Selected
VB: dgv.Rows(n).Selected

により調べることができる。

 なお、行にあるすべてのセルが選択されていたとしても行が選択されていることにはならない。

選択されている行やセルの設定

 行やセルのSelectedプロパティには、trueまたはfalseをセットすることにより、それを選択/非選択の状態にすることができる。

 (x, y)の位置にあるセルを選択状態にするには次のようにする。

C#: dgv[x, y].Selected = true
VB: dgv(x, y).Selected = True

 同様に、n行目の行を選択状態にするには次のようにする。

C#: dgv.Rows[n].Selected = true
VB: dgv.Rows(n).Selected = True

すべての選択されているセルのクリア − ClearSelectionメソッド

 選択されているセルを示すSelectedCellsプロパティの型であるDataGridViewSelectedCellCollectionクラスには、コレクションを空にするClearメソッドが用意されているが、SelectedCellsプロパティは読み取り専用であるため、このメソッドを呼び出しても常に例外が発生する実装になっている。

 現在選択されているセルをクリアし、どのセルも選択されていない状態にするには、代わりにDataGridViewコントロールのClearSelectionメソッドを呼び出さなければならない。

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:Windowsフォーム 処理対象:DataGridViewコントロール
使用ライブラリ:DataGridViewコントロール
使用ライブラリ:DataGridViewCellクラス(System.Windows.Forms名前空間)
使用ライブラリ:DataGridViewSelectedCellCollectionクラス(System.Windows.Forms名前空間)
使用ライブラリ:DataGridViewRowクラス(System.Windows.Forms名前空間)
関連TIPS:DataGridViewコントロールでセル選択を行単位のみで行うようにするには?


「.NET TIPS」のインデックス

.NET TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。