MESCIUS SPREAD for Windows Forms 17.0J サンプルコード集
コードからの実行(複数のソート条件を指定した行範囲のソート)

指定した行範囲内のみでのソートを行う場合は、SheetViewクラスメンバであるSortRowsメソッド(オーバーロードメソッド)呼び出しを行います。

また、列上に同一データが存在する場合のソート結果は保証されないため(並び順不定などの現象が発生)、このような場合には複数のソート条件を定義するSortInfoオブジェクトをあらかじめ作成しておき、本メソッド呼び出し時に指定することで対応します。

【実行例】 ソート前の状態

ソート前の状態

昇順ソート結果(第1キー:1列目/第2キー:2列目としたソート結果)

昇順ソート結果

  • 昇順/降順共に未入力セル(null/Nothing)は最後にソートされます。String.Emptyは他の文字列と同時にソートされます。
  • 自動ソート機能によってソートされるのは表示上のデータのみであり、実データの並び順(データモデル上の並び順)には 一切の影響を与えません。そのため、Excelファイルへのエクスポート時にはソートされていない実データの並び順で出力されますので、このような場合は実データを直接ソートするSortRangeメソッド(SheetViewクラスメンバ)呼び出しを行うことで対応する必要もあります。
  • 結合セルを含むシート上にてソートを実行(※SheetViewクラスのSortRangeメソッドではソートできません)した場合、結合セルは 一時的に非表示となります。この場合、ResetViewRowIndexesメソッドおよびResetViewColumnIndexesメソッド(いずれもSheetView.DocumentModelsクラスメンバ)呼び出しを行うことでソート前の状態にリセットすることができます。
    
             FpSpread1.ActiveSheet.Models.ResetViewRowIndexes()
             FpSpread1.ActiveSheet.Models.ResetViewColumnIndexes()                    
    

 private void Form1_Load(object sender, System.EventArgs e)
 {

   fpSpread1.ActiveSheet.RowCount = 6;
   fpSpread1.ActiveSheet.AlternatingRows[1].BackColor = Color.LightCyan;

   fpSpread1.ActiveSheet.DefaultStyle.CellType = new FarPoint.Win.Spread.CellType.NumberCellType();
   fpSpread1.ActiveSheet.SetValue(0, 0, 10);
   fpSpread1.ActiveSheet.SetValue(1, 0, 100);
   fpSpread1.ActiveSheet.SetValue(2, 0, 100);
   fpSpread1.ActiveSheet.SetValue(3, 0, 10);
   fpSpread1.ActiveSheet.SetValue(4, 0, 5);
   fpSpread1.ActiveSheet.SetValue(5, 0, 10);

   fpSpread1.ActiveSheet.SetValue(0, 1, 10);
   fpSpread1.ActiveSheet.SetValue(1, 1, 40);
   fpSpread1.ActiveSheet.SetValue(2, 1, 10);
   fpSpread1.ActiveSheet.SetValue(3, 1, 20);
   fpSpread1.ActiveSheet.SetValue(4, 1, 10);
   fpSpread1.ActiveSheet.SetValue(5, 1, 40);

 }

 private void button1_Click(object sender, System.EventArgs e)
 {

   //第1キー:1列目/第2キー:2列目としたSortInfoオブジェクトを作成します
   FarPoint.Win.Spread.SortInfo[] si = new FarPoint.Win.Spread.SortInfo[2];
   si[0] = new FarPoint.Win.Spread.SortInfo(0, true);
   si[1] = new FarPoint.Win.Spread.SortInfo(1, true);

   //作成済みソート条件を元に、全ての行を対象としたソートを実行します
   fpSpread1.ActiveSheet.SortRows(0, fpSpread1.ActiveSheet.RowCount, si);

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

   FpSpread1.ActiveSheet.RowCount = 6
   FpSpread1.ActiveSheet.AlternatingRows(1).BackColor = Color.LightCyan

   FpSpread1.ActiveSheet.DefaultStyle.CellType = New FarPoint.Win.Spread.CellType.NumberCellType
   FpSpread1.ActiveSheet.SetValue(0, 0, 10)
   FpSpread1.ActiveSheet.SetValue(1, 0, 100)
   FpSpread1.ActiveSheet.SetValue(2, 0, 100)
   FpSpread1.ActiveSheet.SetValue(3, 0, 10)
   FpSpread1.ActiveSheet.SetValue(4, 0, 5)
   FpSpread1.ActiveSheet.SetValue(5, 0, 10)

   FpSpread1.ActiveSheet.SetValue(0, 1, 10)
   FpSpread1.ActiveSheet.SetValue(1, 1, 40)
   FpSpread1.ActiveSheet.SetValue(2, 1, 10)
   FpSpread1.ActiveSheet.SetValue(3, 1, 20)
   FpSpread1.ActiveSheet.SetValue(4, 1, 10)
   FpSpread1.ActiveSheet.SetValue(5, 1, 40)

 End Sub

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

   '第1キー:1列目/第2キー:2列目としたSortInfoオブジェクトを作成します
   Dim si(1) As FarPoint.Win.Spread.SortInfo
   si(0) = New FarPoint.Win.Spread.SortInfo(0, True)
   si(1) = New FarPoint.Win.Spread.SortInfo(1, True)

   '作成済みソート条件を元に、全ての行を対象としたソートを実行します
   FpSpread1.ActiveSheet.SortRows(0, FpSpread1.ActiveSheet.RowCount, si)

 End Sub

 

 


© MESCIUS inc. All rights reserved.