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