皆がカレンシーの事に興味なかった【C#】


C#のDataGridViewでソートする機能を作らなくてはならなかった。
DataGridViewの仕様をよく把握していなかったのでList>でデータを収集し、DataTableへ追加する形でさっさと作った。
本来であれば独自クラスを作成してBindingSource化すれば.Filterで簡単に検索できるが、大体作り終わった後にその事実を知ったので単純にforループでdataGridView.Rows[]の.Visibleプロパティを変更する形で対応した。

が、此処で問題が発生する。

System.InvalidOperationException: '現在のカレンシー マネージャーの位置に関連付けられた行を非表示にすることはできません。

すぐにGoogle検索を行って対処法を探すが、すぐに引っかかる内容では「BindingSourceで作り直せ」しか見当たらない。
やむを得ず作り直しを決意するために少しだけデータを弄っていたが、その時に不可解な動作が発生する。
特定のデータ検索時にはエラーが発生せずに非表示に出来たのだ。
一回成功したので成功時のデータを何度か再現して動作を確認するとすぐに原因が判明した。
カレンシーはCurrentの意味だったのだ。
CurrentCellとして設定されている行は非表示に出来ないよ、というエラーだったのである。
そのためCurrentCellとして設定されている行を非表示にしなければ問題なく動作する事が確認できた。
ならCurrentCellの設定を事前に削除してしまえば問題なく動作するはずである。

dataGridView.CurrentCell = null;

この設定を追加するだけでカレンシーが出没する事はなくなった。
一行で解決する問題をわざわざBindingSourceで一から作り直してくださいと言うのもどうなんだろうなぁと思ったので備忘録として残します。