0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

.NET DataGridViewのデータソースに列を挿入するときに表示が壊れる件

0
Posted at

社内用にテキスト入力ツールを.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()

は全く問題ありません。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?