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

DataGridViewの列の順番をユーザーが変更できるようにする

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

DataGridViewではAllowUserToOrderColumnsをTrueにすることにより、ユーザーがドラッグ&ドロップで列の位置を変更できるようになります。

VB.NET
コードを隠すコードを選択
'DataGridView1の列の位置をユーザーが変更できるようにする
DataGridView1.AllowUserToOrderColumns = True
C#
コードを隠すコードを選択
//DataGridView1の列の位置をユーザーが変更できるようにする
DataGridView1.AllowUserToOrderColumns = true;

ただし、DataGridViewColumn.Frozenプロパティで列が固定されている場合は、固定された列を固定されていない列に移動できません(逆も同じです)。

補足:上記のようなコードを書く方法以外に、Visual Studioのスマートタグで、「列の順序変更を有効にする」にチェックを入れる方法もあります。

列の位置を取得する

ユーザーが列の位置を変更した場合でも、列のIndexは変更されません。列の位置は、DataGridViewColumn.DisplayIndexプロパティで取得できます。

また、DisplayIndexプロパティを設定することにより、列の位置を変更することもできます。

VB.NET
コードを隠すコードを選択
'列"Column1"の現在の位置を取得する
Console.WriteLine(DataGridView1.Columns("Column1").DisplayIndex)

'列"Column1"を先頭に移動する
DataGridView1.Columns("Column1").DisplayIndex = 0
C#
コードを隠すコードを選択
//列"Column1"の現在の位置を取得する
Console.WriteLine(DataGridView1.Columns["Column1"].DisplayIndex);

//列"Column1"を先頭に移動する
DataGridView1.Columns["Column1"].DisplayIndex = 0;

列の位置が変更されたことを知る

列の位置が変更されたことは、ColumnDisplayIndexChangedイベントで知ることができます。

VB.NET
コードを隠すコードを選択
'DataGridView1のColumnDisplayIndexChangedイベントハンドラ
Private Sub DataGridView1_ColumnDisplayIndexChanged(ByVal sender As Object, _
        ByVal e As DataGridViewColumnEventArgs) _
        Handles DataGridView1.ColumnDisplayIndexChanged
    Console.WriteLine("{0} の位置が {1} に変更されました。", _
        e.Column.Name, e.Column.DisplayIndex)
End Sub
C#
コードを隠すコードを選択
//DataGridView1のColumnDisplayIndexChangedイベントハンドラ
private void DataGridView1_ColumnDisplayIndexChanged(object sender,
    DataGridViewColumnEventArgs e)
{
    Console.WriteLine("{0} の位置が {1} に変更されました。",
        e.Column.Name, e.Column.DisplayIndex);
}

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

  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。