過去にもちろちろ書いておいたんだけど、修正が発覚したのでw
DataGridViewでアンバウンド時にソートしようと思うと、標準機能だけでなくSortメソッドを利用したソートを行う事が必要になるんだよね。んで、その際には実際に判断を下すためのIComparerインターフェースを継承したクラスを用意すると手軽にいけるのよ。
その際、Compareメソッドをオーバーライドして2値の比較結果を算出するようにするんだけど、その際にちょっと考慮する必要がある事が。
AセルとBセルの値においては「値が無い」状態が数種類存在する
ここなんだよねぇ。具体的にはNothingとDBNullなんだけど、Nothingは「比較対象がない」場合と「比較対象のセルに値がない」場合、でDBNullは「比較対象のセルの値がDBNull」という場合。なので実際にはこういったロジックになるんじゃなかろうか。
Dim originalCell As DataGridViewCell = TryCast(originalRow.Cells(sortChild.ColumnIndex), DataGridViewCell)
Dim comparedCell As DataGridViewCell = TryCast(comparedRow.Cells(sortChild.ColumnIndex), DataGridViewCell)If ((originalCell Is Nothing) OrElse (originalCell.Value Is Nothing) OrElse (IsDBNull(originalCell.Value))) AndAlso _
((comparedCell Is Nothing) OrElse (comparedCell.Value Is Nothing) OrElse (IsDBNull(comparedCell))) Then
Continue For ‘セルの値は同じ
End If
多分こんな感じ。ソース中で「セルの値は同じ」場合にContinueしているのは深読みしてくださいw
0 件のコメント:
コメントを投稿