MESCIUS MultiRow for Windows Forms 12.0J
データの並び替え

GcMultiRowコントロールでは、単一または複数のセルの値を使用して行を並び替えることができます。
  • GcMultiRow.AllowUserToAddRowsプロパティがTrueのとき、画面の一番下に表示される行は並べ替えの対象ではありません。

単一のセル値からの行の並び替え
単一のセルの値を元に行を並び替えるには、GcMultiRow.Sortメソッドを使用します。Sortメソッドでは、ソートの基準となるセル、昇順または降順、大文字小文字の区別を指定できます。

次のコードは既定のテンプレートを使用して、2番目のセルの値を基準に用を並び替えます。

Imports GrapeCity.Win.MultiRow

' 既定のテンプレートを設定する
GcMultiRow1.Template = Template.Default
GcMultiRow1.AllowUserToAddRows = False
GcMultiRow1.RowCount = 5

' サンプルデータを設定する
GcMultiRow1.Rows(0).SetValues(New String(2) {"E", "1", "VB"})
GcMultiRow1.Rows(1).SetValues(New String(2) {"D", "2", "VB"})
GcMultiRow1.Rows(2).SetValues(New String(2) {"C", "3", "CS"})
GcMultiRow1.Rows(3).SetValues(New String(2) {"B", "4", "VB"})
GcMultiRow1.Rows(4).SetValues(New String(2) {"A", "5", "CS"})

' 最初のセルを基準に昇順で並び替える
GcMultiRow1.Sort(0, SortOrder.Ascending)
using GrapeCity.Win.MultiRow;

// 既定のテンプレートを設定する
gcMultiRow1.Template = Template.Default;
gcMultiRow1.AllowUserToAddRows = false;
gcMultiRow1.RowCount = 5;

// サンプルデータを設定する
gcMultiRow1.Rows[0].SetValues(new string[3] {"E", "1", "VB"});
gcMultiRow1.Rows[1].SetValues(new string[3] {"D", "2", "VB"});
gcMultiRow1.Rows[2].SetValues(new string[3] {"C", "3", "CS"});
gcMultiRow1.Rows[3].SetValues(new string[3] {"B", "4", "VB"});
gcMultiRow1.Rows[4].SetValues(new string[3] {"A", "5", "CS"});

// 最初のセルを基準に昇順で並び替える
gcMultiRow1.Sort(0, SortOrder.Ascending);

Sortメソッドを使用した結果、グリッドの現在のソート状態を取得するには GcMultiRow.SortOrderプロパティを使用します。

複数のセル値からの行の並び替え
最初のセルに同じ値が存在する場合に次のセルを基準にする、といった要件で並び替えを実行する場合、SortItemクラスのインスタンスで並び替えの条件を設定します。

Imports GrapeCity.Win.MultiRow

' 既定のテンプレートを設定する
GcMultiRow1.Template = Template.Default
GcMultiRow1.AllowUserToAddRows = False
GcMultiRow1.RowCount = 5

' サンプルデータを設定する
GcMultiRow1.Rows(0).SetValues(New String(2) {"B", "1", "VB"})
GcMultiRow1.Rows(1).SetValues(New String(2) {"B", "2", "VB"})
GcMultiRow1.Rows(2).SetValues(New String(2) {"C", "3", "CS"})
GcMultiRow1.Rows(3).SetValues(New String(2) {"B", "4", "VB"})
GcMultiRow1.Rows(4).SetValues(New String(2) {"A", "5", "CS"})

' 並び替えの基準を作成する
Dim sortItem1 As New SortItem(0, SortOrder.Ascending)
Dim sortItem2 As New SortItem(1, SortOrder.Ascending)
' 行を並び替える
GcMultiRow1.Sort(New SortItem(1) {sortItem1, sortItem2}, 0, GcMultiRow1.RowCount - 1)
using GrapeCity.Win.MultiRow;

// 既定のテンプレートを設定する
gcMultiRow1.Template = Template.Default;
gcMultiRow1.AllowUserToAddRows = false;
gcMultiRow1.RowCount = 5;

// サンプルデータを設定する
gcMultiRow1.Rows[0].SetValues(new string[3] {"B", "1", "VB"});
gcMultiRow1.Rows[1].SetValues(new string[3] {"B", "2", "VB"});
gcMultiRow1.Rows[2].SetValues(new string[3] {"C", "3", "CS"});
gcMultiRow1.Rows[3].SetValues(new string[3] {"B", "4", "VB"});
gcMultiRow1.Rows[4].SetValues(new string[3] {"A", "5", "CS"});

// 並び替えの基準を作成する
SortItem sortItem1 = new SortItem(0, SortOrder.Ascending);
SortItem sortItem2 = new SortItem(1, SortOrder.Ascending);
// 行を並び替える
gcMultiRow1.Sort(new SortItem[2] {sortItem1, sortItem2}, 0, gcMultiRow1.RowCount - 1);
ユーザー定義ソート
並び替えの基準を独自に作成するには、System.Collections.IComparerインターフェイスを実装するクラスを作成し、そのインスタンスをGcMultiRow.Sortメソッドに割り当てます。
次のコードでは、値よりもNullを優先して並び替えます。

Imports GrapeCity.Win.MultiRow

' 既定のテンプレートを設定する
GcMultiRow1.Template = Template.Default
GcMultiRow1.AllowUserToAddRows = False
GcMultiRow1.RowCount = 5

' サンプルデータを設定する  
GcMultiRow1.Rows(0).Cells(0).Value = 3
GcMultiRow1.Rows(1).Cells(0).Value = 1
GcMultiRow1.Rows(2).Cells(0).Value = 2
GcMultiRow1.Rows(3).Cells(0).Value = Nothing
GcMultiRow1.Rows(4).Cells(0).Value = 0

' 行を並び替える  
GcMultiRow1.Sort(0, SortOrder.Ascending, New NullComparer())

' Null を優先して並び替える
Public Class NullComparer
    Implements System.Collections.IComparer

    Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
        Implements System.Collections.IComparer.Compare
        If x = y Then
            Return 0
        End If
        If x Is Nothing Then
            Return -1
        End If
        If y Is Nothing Then
            Return 1
        End If

        Dim ix As Integer = DirectCast(x, Integer)
        Dim iy As Integer = DirectCast(y, Integer)
        Return ix - iy
    End Function
End Class
using GrapeCity.Win.MultiRow;

// 既定のテンプレートを設定する 
gcMultiRow1.Template = Template.Default;
gcMultiRow1.AllowUserToAddRows = false;
gcMultiRow1.RowCount = 5;

// サンプルデータを設定する 
gcMultiRow1.Rows[0].Cells[0].Value = 3;
gcMultiRow1.Rows[1].Cells[0].Value = 1;
gcMultiRow1.Rows[2].Cells[0].Value = 4;
gcMultiRow1.Rows[3].Cells[0].Value = null;
gcMultiRow1.Rows[4].Cells[0].Value = 0;

// 行を並び替える 
gcMultiRow1.Sort(0, SortOrder.Ascending, new NullComparer());

// Null を優先して並び替える
public class NullComparer : System.Collections.IComparer
{
    int System.Collections.IComparer.Compare(object x, object y)
    {
        if (x == y)
            return 0;
        if (x == null)
            return -1;
        if (y == null)
            return 1;

        int ix = (int)x;
        int iy = (int)y;
        return ix - iy;
    }
}
   
関連トピック

 

 


© MESCIUS inc. All rights reserved.