C# DataTableを使う時のDefaultView注意

イラスト C#

Datatable でいじってないのにデータが変わる

Datatableを多用した古いアプリをメンテナンスしてます。

最近レアケースで発覚したバグ見つけました。

dt_copy = Start.Cache.dt_orijin

こういう書き方してたんです。イメージ的にDatatable dt に、dt_orijinの内容がコピーされていると思っていたんですけど。

public DataTable dt_orijin

としていて、他のウィンドウでもdt_orijinにフィルタをかけ、自由にdt_orijinの絞り込んだ値をデータテーブルに反映させていました。

Start.Cache.dt_orijin.DefaultView.RowFilter = "cat = 6";

としていたら、なんと、dt_copy まで、cat =6で絞り込まれている状態になっていました。あまり使わない機能だったので長らく利用していなかったのですが、これが問題になり顕在化しました。

内容がイコールになる

事を覚えておかないと変なバグ出します。最近はDataTableを使われる方があまりいないので問題にならないかもしれませんが、覚書です。

対処法

明示的にコピーするためには、

dt_copy = Start.Cache.dt_orijin.Copy();

こうすると、

dt_orijin

と、

dt_copy

は、縁が切れます。

まとめ

DataTableの値がなんかおかしくなると思ったら、これ原因としてあげられそうです。

他のウィンドウで縁が切れていると思っていた private DataTableが勝手にフィルタされてしまうのでデバッグもしづらいです。

コメント

タイトルとURLをコピーしました