MESCIUS SPREAD for Windows Forms 17.0J サンプルコード集
ソートされた並び順をリセットする

列ヘッダクリックによるソートは表示上のみのデータを並べ替えるため、実データ(データモデル)の並び順には影響を与えません。そのため、SheetView.DocumentModelsクラスメンバであるResetViewRowIndexesメソッドおよびResetViewColumnIndexesメソッド呼び出しを行うことで、並べ替えられた表示データを実データの並び順にリセットすることができます。但し、実データ(データモデル)そのものの並べ替えを行うSortRangeメソッド(SheetViewクラスメンバ)を行った場合のリセットは行えません。

なお、結合セルを含むシート上での自動ソートを行った場合に結合セルは一時的に非表示となりますが、上記2つのメソッド呼び出しによって再表示されます。

  • 自動ソート機能(ColumnクラスのAllowAutoSortプロパティ=True)を設定した列ヘッダにはソート可能な状態を示すインジケータ (デフォルトはひし形:変更可、非表示不可) が常に表示されます。昇順/降順インジケータについては非表示設定(ColumnクラスのShowSortIndicatorプロパティ=False)が有効となりますが、自動ソート機能を設定している場合、ソート可能インジケータは常に表示されますので、非表示としたい場合には独自のアイコンを設定するなどの対応が必要となります。

    ソートインジケータ

  • ソート可能インジケータの表示以降、列ヘッダのソートはインジケータ部のクリックによってのみ行われます。( インジケータ部以外の列ヘッダクリックではソートを実行できません)
  • 昇順/降順共に未入力セル(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.Columns[0].AllowAutoSort = true;

   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, 50);
   fpSpread1.ActiveSheet.SetValue(3, 0, 40);
   fpSpread1.ActiveSheet.SetValue(4, 0, 80);
   fpSpread1.ActiveSheet.SetValue(5, 0, 1);
   fpSpread1.ActiveSheet.SetValue(6, 0, 65);
   fpSpread1.ActiveSheet.SetValue(7, 0, 20);
   fpSpread1.ActiveSheet.SetValue(8, 0, 30);
   fpSpread1.ActiveSheet.SetValue(9, 0, 35);

 }

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

   //すべての表示行/列インデックスをモデル行/列インデックスと同じになるようにリセットします
   fpSpread1.ActiveSheet.Models.ResetViewRowIndexes();
   fpSpread1.ActiveSheet.Models.ResetViewColumnIndexes();

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

   '自動ソート機能を有効にします
   FpSpread1.ActiveSheet.Columns(0).AllowAutoSort = True

   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, 50)
   FpSpread1.ActiveSheet.SetValue(3, 0, 40)
   FpSpread1.ActiveSheet.SetValue(4, 0, 80)
   FpSpread1.ActiveSheet.SetValue(5, 0, 1)
   FpSpread1.ActiveSheet.SetValue(6, 0, 65)
   FpSpread1.ActiveSheet.SetValue(7, 0, 20)
   FpSpread1.ActiveSheet.SetValue(8, 0, 30)
   FpSpread1.ActiveSheet.SetValue(9, 0, 35)

 End Sub

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

   'すべての表示行/列インデックスをモデル行/列インデックスと同じになるようにリセットします
   FpSpread1.ActiveSheet.Models.ResetViewRowIndexes()
   FpSpread1.ActiveSheet.Models.ResetViewColumnIndexes()

 End Sub

 

 


© MESCIUS inc. All rights reserved.