独自のソートロジックで行を並び替えたい
対象製品
SPREAD for .NET 2.5J Web Forms Edition
詳細
IComparerの実装クラスを作成し、データの比較方法を定義します。
上記のIComparerオブジェクトを指定してシートのSortRowsメソッドを実行します。
下記では文字列データの並び替えにて英大文字を英小文字の前に並べます。
【VB サンプルコード】
上記のIComparerオブジェクトを指定してシートのSortRowsメソッドを実行します。
下記では文字列データの並び替えにて英大文字を英小文字の前に並べます。
【VB サンプルコード】
----------------------------------
Webフォームクラス
----------------------------------
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If IsPostBack Then
Return
End If
FpSpread1.ActiveSheetView.DataSource = CreateData()
End Sub
Private Function CreateData() As DataSet
'テストデータの生成
Dim ds As New DataSet
Dim dt As New DataTable
dt.Columns.Add(New DataColumn("EMPID", Type.GetType("System.String")))
dt.Columns.Add(New DataColumn("ENAME", Type.GetType("System.String")))
dt.Rows.Add(New Object() {"1", "a"})
dt.Rows.Add(New Object() {"2", "A"})
dt.Rows.Add(New Object() {"3", "b"})
dt.Rows.Add(New Object() {"4", "B"})
dt.Rows.Add(New Object() {"5", "c"})
dt.Rows.Add(New Object() {"6", "C"})
ds.Tables.Add(dt)
Return ds
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Comparerを指定してソートを実行
FpSpread1.ActiveSheetView.SortRows(1, True, True, New MyStringComparer)
End Sub
----------------------------------
IComparer 実装クラス
----------------------------------
Public Class MyStringComparer
Implements System.Collections.IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements Collections.IComparer.Compare
Dim val1 As String = Convert.ToString(x)
Dim val2 As String = Convert.ToString(y)
Dim compareResult As Integer
If val1 Is Nothing And val2 Is Nothing Then
compareResult = String.Compare(val1, val2)
ElseIf val1 Is Nothing And Not val2 Is Nothing Then
compareResult = -1
ElseIf Not val1 Is Nothing And val2 Is Nothing Then
compareResult = 1
ElseIf val1.Equals(val1.ToLower) And Not val2.Equals(val2.ToLower) Then
'小文字の場合、小文字を後にする
compareResult = 1
ElseIf Not val1.Equals(val1.ToLower) And val2.Equals(val2.ToLower) Then
'大文字の場合、大文字を先にする
compareResult = -1
Else
'大文字と大文字、小文字と小文字の比較はデフォルトのString.Compareで処理
compareResult = String.Compare(val1, val2, False)
End If
Return compareResult
End Function
End Class
Webフォームクラス
----------------------------------
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If IsPostBack Then
Return
End If
FpSpread1.ActiveSheetView.DataSource = CreateData()
End Sub
Private Function CreateData() As DataSet
'テストデータの生成
Dim ds As New DataSet
Dim dt As New DataTable
dt.Columns.Add(New DataColumn("EMPID", Type.GetType("System.String")))
dt.Columns.Add(New DataColumn("ENAME", Type.GetType("System.String")))
dt.Rows.Add(New Object() {"1", "a"})
dt.Rows.Add(New Object() {"2", "A"})
dt.Rows.Add(New Object() {"3", "b"})
dt.Rows.Add(New Object() {"4", "B"})
dt.Rows.Add(New Object() {"5", "c"})
dt.Rows.Add(New Object() {"6", "C"})
ds.Tables.Add(dt)
Return ds
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Comparerを指定してソートを実行
FpSpread1.ActiveSheetView.SortRows(1, True, True, New MyStringComparer)
End Sub
----------------------------------
IComparer 実装クラス
----------------------------------
Public Class MyStringComparer
Implements System.Collections.IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements Collections.IComparer.Compare
Dim val1 As String = Convert.ToString(x)
Dim val2 As String = Convert.ToString(y)
Dim compareResult As Integer
If val1 Is Nothing And val2 Is Nothing Then
compareResult = String.Compare(val1, val2)
ElseIf val1 Is Nothing And Not val2 Is Nothing Then
compareResult = -1
ElseIf Not val1 Is Nothing And val2 Is Nothing Then
compareResult = 1
ElseIf val1.Equals(val1.ToLower) And Not val2.Equals(val2.ToLower) Then
'小文字の場合、小文字を後にする
compareResult = 1
ElseIf Not val1.Equals(val1.ToLower) And val2.Equals(val2.ToLower) Then
'大文字の場合、大文字を先にする
compareResult = -1
Else
'大文字と大文字、小文字と小文字の比較はデフォルトのString.Compareで処理
compareResult = String.Compare(val1, val2, False)
End If
Return compareResult
End Function
End Class
関連情報
キーワード
一般
この文書は、以前は次のFAQ IDで公開されていました : 9162