2009年10月2日金曜日

DataGridViewでアンバウンド時にソート

過去にもちろちろ書いておいたんだけど、修正が発覚したので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 件のコメント:

コメントを投稿