作成日: 2020/05/29 最終更新日: 2020/05/29
文書種別
使用方法
詳細
非連結モードで、先頭が■、□、○、◎などの記号から始まる文字列をソートした場合、同じ記号から始まるデータが固まりで表示されるという結果にはなりません。
これは、上述した記号が無視され、記号以外の文字列でソートされるためです。記号も含めてソートするには、IComparerクラスを使用したカスタムソートの機能を使用します。
以下に、■、□から始まる文字列をソートする例を記載します。
◎サンプルコード(VB)
これは、上述した記号が無視され、記号以外の文字列でソートされるためです。記号も含めてソートするには、IComparerクラスを使用したカスタムソートの機能を使用します。
以下に、■、□から始まる文字列をソートする例を記載します。
◎サンプルコード(VB)
Imports C1.Win.C1FlexGrid
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
C1FlexGrid1.Rows.Count = 5
C1FlexGrid1.Cols.Count = 2
C1FlexGrid1(1, 1) = "■商品名1"
C1FlexGrid1(2, 1) = "□商品名2"
C1FlexGrid1(3, 1) = "■商品名3"
C1FlexGrid1(4, 1) = "□商品名4"
End Sub
Private Sub C1FlexGrid1_BeforeSort(sender As Object, e As SortColEventArgs) Handles C1FlexGrid1.BeforeSort
If C1FlexGrid1.Cols(e.Col).Index = 1 Then
Cursor = Cursors.WaitCursor
C1FlexGrid1.Sort(New sortYearDescendingHelper(C1FlexGrid1, e.Order))
Cursor = Nothing
e.Handled = True '上記処理をコントロールに伝える
End If
End Sub
End Class
Public Class sortYearDescendingHelper : Implements IComparer
Dim _flex As C1FlexGrid
Dim _desc As Boolean
Public Sub New(flex As C1FlexGrid, order As SortFlags)
_flex = flex
_desc = ((order And SortFlags.Descending) <> 0)
End Sub
Function Compare(ByVal r1 As Object, ByVal r2 As Object) As Integer Implements IComparer.Compare
Dim s1 As String = DirectCast(_flex(DirectCast(r1, Row).Index, 1), String)
Dim s2 As String = DirectCast(_flex(DirectCast(r2, Row).Index, 1), String)
Dim icmp As Integer = String.Compare(s1, s2, StringComparison.Ordinal) '比較機能を拡張
If (_desc) Then
Return -icmp
Else
Return icmp
End If
End Function
End Class
旧文書番号
85650