DataGridViewには注意が必要

今日、上がって来た不具合の原因…?がコレでした。

http://yiaowang.web.fc2.com/programing/vs_base/research_datatable_02.html
(404やん!orz)


私の場合は、DataGridViewの1行目のデータのみ、反映されませんでした。
2行目以降は DataGridView の値が正しくバインドされた、DataTableに反映されました。

なぜに1行目だけ反映されないのだっ!
いじめです…

ってか、コレって .Net Framework のバグだと思うんですが…



さて、上記URLでは、

・DataGridView に対して値を設定しない。
・DataTable.Copy() をする前には必ず DataTable.AcceptChanges() をする。

と記述がありますが、第3の私なりの修正方法です。

Dim tmp As DataGridViewCell = dataGridView.CurrentCell     ' カレントセルを保持
dataGridView.CurrentCell = dataGridView.Rows(0).Cells(0)  ' 値を変更するセルをカレントセルに設定
dataGridView.BeginEdit(True)                                 ' 編集開始
dataGridView.Rows(0).Cells(0).Value = "aaa"                ' 値を格納
dataGridView.EndEdit()                                        ' 編集終了
dataGridView.CurrentCell = tmp                               ' カレントセルを戻す


です。カレントセルが移動して良い人は、必要ないかも知れません。

私の環境では動きました。
ただ、重そうです…ループすると重そうです。全セル対応すると重そうです。
で、実験の結果、1行目だけ反映されないので、rows(0)の時だけこの処理をするようにしました。

場当たり的な対応で嫌いです。
誰かもっと良い方法を教えて。
(個人的にはDataGridViewの作成時の設定に問題がありそうな気がする…)

へるぷみー


検索用:
DataGirdView DataTable copy() DataTable.copy()
値が変わる 値が違う 値がコピーされない 正しくコピーされない

コメント

このブログの人気の投稿

ヨドバシカメラの店舗購入履歴を見るには…

C# の WPF の DataGrid で 行を交互に背景色を変える+選択色を変える+カラムが無い所も変える…

Visual Studio の ホットリロードが動かない場合に確認するところ