[C#]DataGridViewで選択行を画面に表示させる

以下のコードで、DataGridViewで選択されている行が画面の一番上の行に表示されます。

if ( DataGridView1.SelectedCells.Count > 0 ) { 
    DataGridView1.FirstDisplayedScrollingRowIndex = DataGridView1.SelectedCells[0].RowIndex;
}



複数のセルが選択されている場合は、最初のセルがある行を表示します。


まず、DataGridView1.SelectedCells.Countで、選択された行があるかをチェックしています。
選択行がある場合は、最初の選択セルがある行を、DataGridView1.SelectedCells[0].RowIndexで取得し,
その結果をFirstDisplayedScrollingRowIndexにセットすることで、表示上の一番上の行にさせます。

結果としてグリッドがスクロールし、選択行が表示されるようになります。


常に選択行を表示したい場合は、グリッドのセル選択が変わったときのイベントか、タイマーで一定時間毎に上記の処理を行えばOKです。


上記の処理だと、選択された行が既に画面に表示されている場合でも、対象行が一番上に移動してしまいます。
画面外にスクロールアウトされている時だけ一番上の行として表示させる場合は、以下のチェックを追加します。

// 選択された行を先頭行にする
if ( DataGridView1.SelectedCells.Count > 0 ) { 
    // 対象行が非表示の場合は何もしない
    if ( !DataGridView1.SelectedCells[0].Visible ) {
        return;
    }
    // 対象行が既に画面内に表示されている時は何もしない
    if ( DataGridView1.SelectedCells[0].Displayed ) {
        return;
    }
 
    DataGridView1.FirstDisplayedScrollingRowIndex = DataGridView1.SelectedCells[0].RowIndex;
}

関連記事

コメントを残す

メールアドレスが公開されることはありません。