自動ソート実行時に複数のソート条件を指定する方法
対象製品
SPREAD for Windows Forms 7.0J
詳細
複数のソート条件を指定する場合にはSortInfoクラスを利用します。列ヘッダクリックによるソート開始時にはAutoSortingColumnイベントが発生しますので、このデフォルト動作をキャンセルし、SheetViewクラスメンバであるSortRowsメソッド呼び出しを実装することで対応出来ます。
◎サンプルコード(VB)
◎サンプルコード(C#)
◎サンプルコード(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
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);
}
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);
}
関連情報
- 複数のソート条件を指定することは出来ますか?
- 列ソートを行ってもデータモデルの並び順が変更されません(ソートした並びでExcelファイルにエクスポートされません)
- 行連結した列ヘッダにソートインジケーターが表示されません。また、ソートインジケーターの表示/非表示を制御することは出来ますか?
- 結合セルが含まれるスプレッドシートでは並べ替えを実行できませんが、対応方法はありますか?
- 独自のソートロジックで行を並び替えたい
キーワード
「ソート」