DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

DataGridViewで選択されている列、行、セルを取得する、または列、行、セルを選択する

注意:DataGridViewコントロールは、.NET Framework 2.0で新しく追加されました。

選択されている列、行、セルを取得する

DataGridViewで選択されている列、行、セルを取得するには、DataGridViewオブジェクトのSelectedColumns、SelectedRows、SelectedCellsプロパティを使用します。

なお、SelectionModeプロパティにより、行や列が選択できるか否かを指定できます。SelectionModeプロパティについて詳しくは、こちらで説明しています。

VB.NET
コードを隠すコードを選択
'選択されているセルを表示
Console.WriteLine("選択されているセル")
For Each c As DataGridViewCell In DataGridView1.SelectedCells
    Console.WriteLine("{0}, {1}", c.ColumnIndex, c.RowIndex)
Next c

'選択されている行を表示
Console.WriteLine("選択されている行")
For Each r As DataGridViewRow In DataGridView1.SelectedRows
    Console.WriteLine(r.Index)
Next r

'選択されている列を表示
Console.WriteLine("選択されている列")
For Each c As DataGridViewColumn In DataGridView1.SelectedColumns
    Console.WriteLine(c.Index)
Next c
C#
コードを隠すコードを選択
//選択されているセルを表示
Console.WriteLine("選択されているセル");
foreach (DataGridViewCell c in DataGridView1.SelectedCells)
{
    Console.WriteLine("{0}, {1}", c.ColumnIndex, c.RowIndex);
}

//選択されている行を表示
Console.WriteLine("選択されている行");
foreach (DataGridViewRow r in DataGridView1.SelectedRows)
{
    Console.WriteLine(r.Index);
}

//選択されている列を表示
Console.WriteLine("選択されている列");
foreach (DataGridViewColumn c in DataGridView1.SelectedColumns)
{
    Console.WriteLine(c.Index);
}

また、特定の列、行、セルが選択されているか調べるには、Selectedプロパティを使います。Selectedプロパティについては、後述します。

パフォーマンスを向上させる

選択されている範囲が広いと、これらのプロパティのパフォーマンスは低下します。

もし選択されているセルの数だけを取得したいのであれば、「DataGridView1.SelectedCells.Count」のように取得するのではなく、DataGridView.GetCellCountメソッドを使用したほうが効率的です。同様に、選択されている列の数はGetColumnCountメソッドを、行の数はGetRowCountメソッドを使用した方が効率的です。

VB.NET
コードを隠すコードを選択
'選択されているセルの数
Console.WriteLine( _
    DataGridView1.GetCellCount(DataGridViewElementStates.Selected))

'選択されている行の数
Console.WriteLine( _
    DataGridView1.Rows.GetRowCount(DataGridViewElementStates.Selected))

'選択されている列の数
Console.WriteLine( _
    DataGridView1.Columns.GetColumnCount(DataGridViewElementStates.Selected))
C#
コードを隠すコードを選択
//選択されているセルの数
Console.WriteLine(
    DataGridView1.GetCellCount(DataGridViewElementStates.Selected));

//選択されている行の数
Console.WriteLine(
    DataGridView1.Rows.GetRowCount(DataGridViewElementStates.Selected));

//選択されている列の数
Console.WriteLine(
    DataGridView1.Columns.GetColumnCount(DataGridViewElementStates.Selected));

DataGridView内のすべてセルが選択されているか調べるには、DataGridView.AreAllCellsSelectedメソッドを使用するようにします。

補足:AreAllCellsSelectedメソッドにより、共有行が非共有となる可能性があります。

また、SelectionModeプロパティをFullRowSelectやFullColumnSelectにして行や列全体が選択されるようにしておくことにより、SelectedCellsよりも効率的なSelectedColumnsやSelectedRowsプロパティで選択場所を調べることができるようになります。

指定した列、行、セルを選択する

指定した列、行、セルを選択するには、SelectedプロパティをTrueにします。

VB.NET
コードを隠すコードを選択
'(0, 0)のセルを選択する
DataGridView1(0, 0).Selected = True

'インデックス1の行を選択する
DataGridView1.Rows(1).Selected = True

'インデックス2の列を選択する
DataGridView1.Columns(2).Selected = True
C#
コードを隠すコードを選択
//(0, 0)のセルを選択する
DataGridView1[0, 0].Selected = true;

//インデックス1の行を選択する
DataGridView1.Rows[1].Selected = true;

//インデックス2の列を選択する
DataGridView1.Columns[2].Selected = true;

ただし、SelectionModeプロパティの設定により行や列が選択できないようになっているときに行や列を選択しようとしても無視されます。また、共有行を選択しようとすると、例外がスローされます。

なお、全てのセルを選択するには、DataGridView.SelectAllメソッドを使用すべきです。また、全ての選択を解除するには、DataGridView.ClearSelectionメソッドを使用します。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。