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

DataGridView内のあるセル、列、行が現在表示されているか調べる

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

DataGridView内のあるセルが、現在画面に表示されているか調べるには、DataGridViewCell.Displayedプロパティを使います。DataGridViewCell.Visibleプロパティでは、セルが非表示となっているか(つまり、セルのある列または行が非表示となっているか)を調べることができますが、Displayedプロパティでは、画面の外にスクロールされて表示されていない場合を含めて調べることができます。セルの一部が少しでも画面に表示されていれば、DisplayedプロパティはTrueになるようです。

(0, 0)のセルがスクロールアウトされているときに、現在のセルを(0, 0)にする例を示します。

VB.NET
コードを隠すコードを選択
If Not DataGridView1(0, 0).Displayed Then
    DataGridView1.CurrentCell = DataGridView1(0, 0)
End If
C#
コードを隠すコードを選択
if (!DataGridView1[0, 0].Displayed)
{
    DataGridView1.CurrentCell = DataGridView1[0, 0];
}

DataGridViewの列や行が現在画面に表示されているかも、Displayedプロパティ(列の場合はDataGridViewBand.Displayedプロパティ、行の場合はDataGridViewRow.Displayedプロパティ)で調べることができます。

インデックスが0の列と行が画面に表示されているか調べる例を示します。

VB.NET
コードを隠すコードを選択
If DataGridView1.Columns(0).Displayed Then
    Console.WriteLine("インデックス0の列は表示されています")
End If

If DataGridView1.Rows(0).Displayed Then
    Console.WriteLine("インデックス0の行は表示されています")
End If
C#
コードを隠すコードを選択
if (DataGridView1.Columns[0].Displayed)
{
    Console.WriteLine("インデックス0の列は表示されています");
}

if (DataGridView1.Rows[0].Displayed)
{
    Console.WriteLine("インデックス0の行は表示されています");
}
補足:列や行が画面に表示されているか調べる別の方法としては、Stateプロパティ(列の場合はDataGridViewElement.Stateプロパティ、行の場合はDataGridViewRow.Stateプロパティ)にDataGridViewElementStates.Displayed値が含まれているか調べる方法があります。しかし行の場合は共有行でStateプロパティが使えませんので、代わりにDataGridViewRow.GetStateメソッドを使用する必要があります。
  • 履歴:
  • 2015/2/9 列と行に関する記述を追加し、タイトルも変更。セルの例で、Visibleプロパティは調べないように変更。

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

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