PowerTools SPREAD for ASP.NET 8.0J
コードによるソート

メソッドを利用して、コードによる列または行のソート、およびソートの解除を実行することができます。コードによるソートでは、複数のキー(条件)を指定することも可能です。ソート条件の情報はSortInfo クラスで定義します。SortInfo クラスの配列を作成することで、複数キーを生成します。

列のソート

SheetView クラスSortColumns メソッドを使用して列をソートすることができます。

サンプルコード

次のサンプルコードは、列のソートを実行する例です。

FarPoint.Web.Spread.SheetView sv;
FarPoint.Web.Spread.SortInfo[] s = new FarPoint.Web.Spread.SortInfo[1];
s[0] = new FarPoint.Web.Spread.SortInfo(0, false);
sv = FpSpread1.ActiveSheetView;
sv.SortColumns(0, 2, s);
Dim sv As FarPoint.Web.Spread.SheetView
Dim s(1) As FarPoint.Web.Spread.SortInfo
s(0) = New FarPoint.Web.Spread.SortInfo(0, False)
sv = FpSpread1.ActiveSheetView
sv.SortColumns(0, 2, s)
行のソート

SheetView クラスSortRows メソッドを使用して行をソートすることができます。次のようなソート条件を指定できます。

サンプルコード

次のサンプルコードは、ボタンクリックにより独自ソートを実行します。ここでは、ハイフン"-"以下の文字に対してソートを行います。

public class WebPage1 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack) return;
        FpSpread1.ActiveSheetView.RowCount = 6;
        FpSpread1.ActiveSheetView.SetValue(0, 1, "Y-221");
        FpSpread1.ActiveSheetView.SetValue(1, 1, "B-158");
        FpSpread1.ActiveSheetView.SetValue(2, 1, "A-001");
        FpSpread1.ActiveSheetView.SetValue(3, 1, "H-310");
        FpSpread1.ActiveSheetView.SetValue(4, 1, "O-455");
        FpSpread1.ActiveSheetView.SetValue(5, 1, "H-122");
    }
    
    protected void Button1_Click(object sender, EventArgs e)
    {
        // 独自ソートを実行します。
        FpSpread1.ActiveSheetView.SortRows(1, true, false, new MyStringComparer());
    }
}

public class MyStringComparer : System.Collections.IComparer
{

    public int Compare(object x, object y)
    {
        // ハイフン以降の文字を抜き出します。
        string val1 = Convert.ToString(x).Substring(Convert.ToString(x).IndexOf("-") + 1);
        string val2 = Convert.ToString(y).Substring(Convert.ToString(y).IndexOf("-") + 1);

        int compareResult;
        compareResult = string.Compare(val1, val2, false);

        return compareResult;
    }
}
Public Class WebPage1
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If IsPostBack Then
            Return
        End If
        
        FpSpread1.ActiveSheetView.RowCount = 6
        FpSpread1.ActiveSheetView.SetValue(0, 1, "Y-221")
        FpSpread1.ActiveSheetView.SetValue(1, 1, "B-158")
        FpSpread1.ActiveSheetView.SetValue(2, 1, "A-001")
        FpSpread1.ActiveSheetView.SetValue(3, 1, "H-310")
        FpSpread1.ActiveSheetView.SetValue(4, 1, "O-455")
        FpSpread1.ActiveSheetView.SetValue(5, 1, "H-122")
    End Sub
    
    Protected Sub Button1_Click(sender As Object, e As EventArgs)
        ' 独自ソートを実行します。
        FpSpread1.ActiveSheetView.SortRows(1, True, False, New MyStringComparer())
    End Sub
End Class

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).Substring(Convert.ToString(x).IndexOf("-") + 1)
        Dim val2 As String = Convert.ToString(y).Substring(Convert.ToString(y).IndexOf("-") + 1)

        Dim compareResult As Integer
        compareResult = String.Compare(val1, val2, False)

        Return compareResult
    End Function
End Class
ソートの解除

列のソートを解除するには、SheetView クラスResetViewColumnIndexes メソッドを実行します。行のソートを解除するには、ResetViewRowIndexes メソッドを実行します。

なお、ResetViewRowIndexes メソッドは、ユーザーによるソートを解除することも可能です。

サンプルコード

次のサンプルコードは、1列目のヘッダのクリックにより行のソートを解除します。

protected void FpSpread1_SortColumnCommand(object sender, FarPoint.Web.Spread.SpreadCommandEventArgs e)
{
    if (e.SheetView.ActiveColumn == 1)
    {
        FpSpread1.ActiveSheetView.ResetViewRowIndexes();
        e.Handled = true;
    }
}
Protected Sub FpSpread1_SortColumnCommand(ByVal sender As Object, ByVal e As FarPoint.Web.Spread.SpreadCommandEventArgs) Handles FpSpread1.SortColumnCommand
    If e.SheetView.ActiveColumn = 1 Then
            FpSpread1.ActiveSheetView.ResetViewRowIndexes()
        e.Handled = True
    End If
End Sub
関連トピック

 

 


© 2003-2015, GrapeCity inc. All rights reserved.