メソッドを利用して、コードによる列または行のソート、およびソートの解除を実行することができます。コードによるソートでは、複数のキー(条件)を指定することも可能です。ソート条件の情報は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