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

DataGridViewの現在のセルを取得、または変更する

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

現在のセルを取得する

現在のセル(フォーカスのあるセル)は、DataGridViewオブジェクトのCurrentCellプロパティで取得できます。現在のセルが存在しないときは、Nothing(C#ではnull)になります。

VB.NET
コードを隠すコードを選択
'現在のセルの値を表示
Console.WriteLine(DataGridView1.CurrentCell.Value)
'現在のセルの列インデックスを表示
Console.WriteLine(DataGridView1.CurrentCell.ColumnIndex)
'現在のセルの行インデックスを表示
Console.WriteLine(DataGridView1.CurrentCell.RowIndex)
C#
コードを隠すコードを選択
//現在のセルの値を表示
Console.WriteLine(DataGridView1.CurrentCell.Value);
//現在のセルの列インデックスを表示
Console.WriteLine(DataGridView1.CurrentCell.ColumnIndex);
//現在のセルの行インデックスを表示
Console.WriteLine(DataGridView1.CurrentCell.RowIndex);
補足:現在のセルが新しい行(DataGridViewの最後の行)にあるときにCurrentCellプロパティで現在のセルの情報を取得すると、現在のセルがその上のセルに変更され、CurrentCellプロパティは変更後のセルの情報を返すようです。ただし、CurrentCellChangedやSelectionChangedイベントでCurrentCellプロパティを取得した時は、そうならないようです。

現在のセルの位置を取得するだけならば、DataGridView.CurrentCellAddressプロパティを使用します。CurrentCellAddressプロパティを使用すれば、セルに直接アクセスせず、共有行が非共有行になることを防ぐことができます。

補足:現在のセルがない場合は、CurrentCellAddressのXとYは-1になります。
VB.NET
コードを隠すコードを選択
Console.WriteLine("現在のセルの位置は、({0}, {1})です。", _
    DataGridView1.CurrentCellAddress.X, _
    DataGridView1.CurrentCellAddress.Y)
C#
コードを隠すコードを選択
Console.WriteLine("現在のセルの位置は、({0}, {1})です。",
    DataGridView1.CurrentCellAddress.X,
    DataGridView1.CurrentCellAddress.Y);
補足:現在のセルのある行を取得するには、DataGridView.CurrentRowプロパティを使用します。

現在のセルを変更する

現在のセルは、DataGridViewオブジェクトのCurrentCellプロパティを設定することにより、変更できます。

(0, 0)を現在のセルにする例を以下に示します。

VB.NET
コードを隠すコードを選択
'(0, 0)を現在のセルにする
DataGridView1.CurrentCell = DataGridView1(0, 0)
C#
コードを隠すコードを選択
//(0, 0)を現在のセルにする
DataGridView1.CurrentCell = DataGridView1[0, 0];

このように現在のセルを変更したとき、そのセルが表示されていなければ、そのセルが表示されるようにスクロールされます。

CurrentCellプロパティにNothing(C#ではnull)を設定すると、現在のセルは一時的になくなりますが、DataGridViewがフォーカスを受け取ると、DataGridView.FirstDisplayedCellプロパティに設定されているセルが自動的に現在のセルになります。

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

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