注意:DataGridViewコントロールは、.NET Framework 2.0で新しく追加されました。
DataGridViewではAllowUserToOrderColumnsをTrueにすることにより、ユーザーがドラッグ&ドロップで列の位置を変更できるようになります。
'DataGridView1の列の位置をユーザーが変更できるようにする DataGridView1.AllowUserToOrderColumns = True
//DataGridView1の列の位置をユーザーが変更できるようにする DataGridView1.AllowUserToOrderColumns = true;
ただし、DataGridViewColumn.Frozenプロパティで列が固定されている場合は、固定された列を固定されていない列に移動できません(逆も同じです)。
補足:上記のようなコードを書く方法以外に、Visual Studioのスマートタグで、「列の順序変更を有効にする」にチェックを入れる方法もあります。
ユーザーが列の位置を変更した場合でも、列のIndexは変更されません。列の位置は、DataGridViewColumn.DisplayIndexプロパティで取得できます。
また、DisplayIndexプロパティを設定することにより、列の位置を変更することもできます。
'列"Column1"の現在の位置を取得する Console.WriteLine(DataGridView1.Columns("Column1").DisplayIndex) '列"Column1"を先頭に移動する DataGridView1.Columns("Column1").DisplayIndex = 0
//列"Column1"の現在の位置を取得する Console.WriteLine(DataGridView1.Columns["Column1"].DisplayIndex); //列"Column1"を先頭に移動する DataGridView1.Columns["Column1"].DisplayIndex = 0;
列の位置が変更されたことは、ColumnDisplayIndexChangedイベントで知ることができます。
'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
//DataGridView1のColumnDisplayIndexChangedイベントハンドラ private void DataGridView1_ColumnDisplayIndexChanged(object sender, DataGridViewColumnEventArgs e) { Console.WriteLine("{0} の位置が {1} に変更されました。", e.Column.Name, e.Column.DisplayIndex); }