自動ソート実行時に複数のソート条件を指定する方法

文書番号 : 33568     文書種別 : 使用方法     登録日 : 2012/11/14     最終更新日 : 2012/11/14
文書を印刷する
対象製品
SPREAD for Windows Forms 7.0J
詳細
複数のソート条件を指定する場合にはSortInfoクラスを利用します。列ヘッダクリックによるソート開始時にはAutoSortingColumnイベントが発生しますので、このデフォルト動作をキャンセルし、SheetViewクラスメンバであるSortRowsメソッド呼び出しを実装することで対応出来ます。

◎サンプルコード(VB)
Imports FarPoint.Win.Spread.Model

  Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

    FpSpread1.ActiveSheet.RowCount = 5
    FpSpread1.ActiveSheet.ColumnCount = 2
    FpSpread1.ActiveSheet.SetValue(0, 0, 10)
    FpSpread1.ActiveSheet.SetValue(1, 0, 5)
    FpSpread1.ActiveSheet.SetValue(2, 0, 10)
    FpSpread1.ActiveSheet.SetValue(3, 0, 5)
    FpSpread1.ActiveSheet.SetValue(4, 0, 5)

    FpSpread1.ActiveSheet.SetValue(0, 1, 200)
    FpSpread1.ActiveSheet.SetValue(1, 1, 1)
    FpSpread1.ActiveSheet.SetValue(2, 1, 100)
    FpSpread1.ActiveSheet.SetValue(3, 1, 2)
    FpSpread1.ActiveSheet.SetValue(4, 1, 3)

    '第一列の自動ソートを許可します
    FpSpread1.ActiveSheet.Columns(0).AllowAutoSort = True

  End Sub

  Private Sub FpSpread1_AutoSortingColumn(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.AutoSortingColumnEventArgs) Handles FpSpread1.AutoSortingColumn
    'デフォルト動作をキャンセルします
    e.Cancel = True

    '現在のソートインジケーターを取得します
    Dim Indicator As SortIndicator = FpSpread1.ActiveSheet.Columns(e.Column).SortIndicator

    Dim si(1) As FarPoint.Win.Spread.SortInfo

    'ソートキーを「第一列」「第二列」の順で設定します
    If Indicator = SortIndicator.None Or Indicator = SortIndicator.Descending Then
      FpSpread1.ActiveSheet.Columns(e.Column).SortIndicator = SortIndicator.Ascending
      si(0) = New FarPoint.Win.Spread.SortInfo(0, True)
      si(1) = New FarPoint.Win.Spread.SortInfo(1, True)
    Else
      FpSpread1.ActiveSheet.Columns(e.Column).SortIndicator = SortIndicator.Descending
      si(0) = New FarPoint.Win.Spread.SortInfo(0, False)
      si(1) = New FarPoint.Win.Spread.SortInfo(1, False)
    End If

    'ソートを実行します
    FpSpread1.ActiveSheet.SortRows(0, FpSpread1.ActiveSheet.RowCount, si)

  End Sub


◎サンプルコード(C#)
using FarPoint.Win.Spread.Model;

  private void Form1_Load(object sender, System.EventArgs e)
  {
    fpSpread1.ActiveSheet.RowCount = 5;
    fpSpread1.ActiveSheet.ColumnCount = 2;
    fpSpread1.ActiveSheet.SetValue(0, 0, 10);
    fpSpread1.ActiveSheet.SetValue(1, 0, 5);
    fpSpread1.ActiveSheet.SetValue(2, 0, 10);
    fpSpread1.ActiveSheet.SetValue(3, 0, 5);
    fpSpread1.ActiveSheet.SetValue(4, 0, 5);

    fpSpread1.ActiveSheet.SetValue(0, 1, 200);
    fpSpread1.ActiveSheet.SetValue(1, 1, 1);
    fpSpread1.ActiveSheet.SetValue(2, 1, 100);
    fpSpread1.ActiveSheet.SetValue(3, 1, 2);
    fpSpread1.ActiveSheet.SetValue(4, 1, 3);

    //第一列の自動ソートを許可します
    fpSpread1.ActiveSheet.Columns[0].AllowAutoSort = true;
  }

  private void fpSpread1_AutoSortingColumn(object sender, FarPoint.Win.Spread.AutoSortingColumnEventArgs e)
  {
    //デフォルト動作をキャンセルします
    e.Cancel = true;

    //現在のソートインジケーターを取得します
    SortIndicator Indicator = fpSpread1.ActiveSheet.Columns[e.Column].SortIndicator;

    FarPoint.Win.Spread.SortInfo[] si = new FarPoint.Win.Spread.SortInfo[2];

    //ソートキーを「第一列」「第二列」の順で設定します
    if (Indicator == SortIndicator.None || Indicator == SortIndicator.Descending)
    {  
    fpSpread1.ActiveSheet.Columns[e.Column].SortIndicator = SortIndicator.Ascending;
      si[0] = new FarPoint.Win.Spread.SortInfo(0, true);
      si[1] = new FarPoint.Win.Spread.SortInfo(1, true);
    }
    else
    {
    fpSpread1.ActiveSheet.Columns[e.Column].SortIndicator = SortIndicator.Descending;
      si[0] = new FarPoint.Win.Spread.SortInfo(0, false);
      si[1] = new FarPoint.Win.Spread.SortInfo(1, false);
    }

    //ソートを実行します
    fpSpread1.ActiveSheet.SortRows(0, fpSpread1.ActiveSheet.RowCount, si);

  }
関連情報
キーワード
「ソート」