独自のソートロジックで行を並び替えたい

文書番号 : 21838     文書種別 : 技術情報     最終更新日 : 2006/06/23
文書を印刷する
対象製品
SPREAD for .NET 2.5J Web Forms Edition
詳細
IComparerの実装クラスを作成し、データの比較方法を定義します。
上記の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
関連情報
キーワード
一般

この文書は、以前は次のFAQ IDで公開されていました : 9162