【開発】いまさら気付くDataGridViewソートって.Net

開発ざれごと.net,datagridview

300px-Kana-ami_P8086662

こんだけ使ってきて今更気づいたんで、情けないんだが、備忘録として。

.net開発者として、DataGridViewの簡単便利さには敬服しまくりですが、なんやらrowsで取得できるシロモノの順番のお話。

Column.SortModeでAutomatic限定の問題。


なんで今まで気づかなかったのが不思議でたまらないんですが・・。

DataGridViewでソートまわりをいじってた時です。中身をいじると、もちろんソート順序に依存しますよね。実装だけ済まして、なんか変な挙動を見たにも関わらず、スルーしてた。所詮は、UIの事なので、スルーしがちになってしまいます。

よくよく見たら、あまりに変な挙動してるので、改めて見なおしてみた所、今更気付くという。

DataGridView.Rows[]や、foreach(DataGridView.Rowsでは、今現在の見た目の並びで取得できます。

つまり、ユーザーやコードからソートやデータ改変を掛ければ、このRowsから取得する順番も変わってきます。

(ちなみに、よく利用するSelectedRowsは、見た目の順番に関係無く、返ってきます。これも重要な点)

見た目の並びという点が重要で、取得中に、(Automaticソート対象列の)データの改変をしてしまったら、取得順並びに影響があるんですよねぇ。そういう事です。まさにこれでした。

Column.SortModeで、Automaticの場合だけですけどね。

解決策になるメソッドやらを探してる暇が無かったので、処理前に、各RowsのDataBindItem先のキーを保存しておき、それを元に、DataGridView.ClearSelection; Selected=trueで戻してあげて対処しました。

処理前に、Rowインスタンスの保持の案もありますが、ダメなんですよね。

何かの(ソートに影響ある)処理中は、注意する必要がある。

開発ざれごと.net,datagridview

Posted by nabe