DataGridViewコントロールでは、グリッド上での行の追加/削除やセルの値の編集以外にも、現在選択されている行やセルに対して何らかの操作を行うことも多い。本稿ではこのような選択されている行やセルに関する処理についてまとめる。
なお選択されている「列」についてはここでは割愛するが、以降の行について解説の中で登場するクラス名やプロパティ名の「Row」の部分を「Column」に置き換えたものを使用することで、列についても行と同等の操作が行える(例:SelectedRows→SelectedColumns)*。
*ただし列のSortModeプロパティがAutomatic以外でないと列は選択できない
現在選択されているセル(DataGridViewCellクラスのオブジェクト)は、DataGridViewコントロールのSelectedCellsプロパティから取得できる。グリッド上では複数個のセルを同時に選択できるため、このプロパティはセルのコレクション(DataGridViewSelectedCellCollectionクラスのオブジェクト)となっている。
選択されている個々のセルについて操作する場合には、以下のようにして個々のセルを列挙することができる(以降では変数dgvはDataGridViewコントロールを参照しているものとする)。
foreach (DataGridViewCell cell in dgv.SelectedCells) {
// 選択されている個々のセル「cell」についての処理
}
For Each cell As DataGridViewCell in dgv.SelectedCells
' 選択されている個々のセル「cell」についての処理
Next
また、現在選択されているセルの個数は、コレクションの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
なお、DataGridViewコントロールのMultiSelectプロパティをfalseに設定することにより、ユーザーが複数の行(選択モードが行単位の場合*)やセルを選択できないようにできる。
*選択モードについては「TIPS:DataGridViewコントロールでセル選択を行単位のみで行うようにするには?」を参照。
DataGridViewコントロールでは、行ヘッダのセルをクリックすることにより行を選択できるが、このようにして選択された行(DataGridViewRowクラスのオブジェクト)のコレクションは、DataGridViewコントロールのSelectedRowsプロパティより取得できる。
foreach (DataGridViewRow row in dgv.SelectedRows) {
// 選択されている個々の行「row」についての処理
}
For Each row As DataGridViewRow in dgv.SelectedRows
' 選択されている個々の行「row」についての処理
Next
セルの場合と同様に、選択されている行の個数は、
dgv.SelectedRows.Count
により取得できる。
当然ながら、行が選択されている場合には、その行のすべてのセルはSelectedCellsプロパティに含まれている。
特定のセルが現在選択されているかどうかを調べるには、セルのSelectedプロパティをチェックする。選択されていればtrue、されていなければfalseとなる。
例えば、(x, y)の位置にあるセルが選択されているかどうかを知るには、
C#: dgv[x, y].Selected
VB: dgv(x, y).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
選択されているセルを示す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コントロールでセル選択を行単位のみで行うようにするには?
Copyright© Digital Advantage Corp. All Rights Reserved.