社内用にテキスト入力ツールを.net(4.0)で作成しています。
入力されたデータの確認用にDataGridViewを使用。
確認用なので編集機能は付けていませんでしたが、「確認画面(DataGridView)で、列の挿入と削除ができたら便利」とリクエストがあり実装することに。
DataGridView のDataSourceだいたい以下の感じでDataTableをバインドしています。
Datatable dt = new Datatable();
dtにデータをいれる();
DataGridView dgv = new DataGridView();
dgv.Datasource = dt;
列の削除
DataTableから任意の列を削除するだけでOK。DataGridView の見た目も狙い通り変わります。
dt.Columns.RemoveAt(削除する列番号)
列の挿入
DataTableの任意の位置に列を挿入。
dt.Columns.Add().SetOrdinal(挿入したい列番号)
当然これでDataGridView の見た目も狙い通り変わる、と思いきやだめでした。
なぜか挿入列が必ず最後の列として表示されてしまいます。
データソースであるDataTableの情報は正しく
さらにDataGridViewの中身も、CellPaintingイベントなどでe.ColumnIndexなどを見る限り正しい(狙いどおりの列が挿入されている)。
表示だけがおかしい
よくわかりませんが、DataGridViewのバグでしょうか(適当)
非常に不可解ですが、スマートな回避策が見つからず。
以下のようにDataSourceをセットしなおしたらできました。
dt.Columns.Add().SetOrdinal(挿入したい列番号)
dgv.Datasource = null;
dgv.Datasource = dt;
ちなみに、列を末尾に追加する
dt.Columns.Add()
は全く問題ありません。