列ソートを行ってもデータモデルの並び順が変更されません(ソートした並びでExcelファイルにエクスポートされません)

文書番号 : 33584     文書種別 : 使用方法     登録日 : 2012/11/14     最終更新日 : 2012/11/14
文書を印刷する
対象製品
SPREAD for Windows Forms 7.0J
詳細
例えば列のAllowAutoSortプロパティをTrueにした場合の自動列ソートを行った際、並べ替えが行われるのはデータの表示のみでありデータモデルが影響を受けることはありません。また、Excelファイルにエクスポートされるデータはデータモデルの並びとなるため、必ずしも画面上の並び順で出力されません。このような場合は以下のメソッド呼び出しにより対応します。(いずれもSheetViewクラスメンバ)

【SortRange】メソッド
データモデル内のセル範囲を並べ替えます。データモデル内のセル範囲を並べ替えたい場合には本メソッド呼び出しを行います。

◎サンプルコード
  Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    Dim sort(1) As FarPoint.Win.Spread.SortInfo
    sort(0) = New FarPoint.Win.Spread.SortInfo(0, True)
    'データモデル内のセル範囲を並べ替えます
    FpSpread1.ActiveSheet.SortRange(0, 0, 5, 1, True, sort)
  End Sub

また、「表示データ」と「実データ」を相互参照することも出来ます。

【GetViewRowFromModelRow】メソッド
モデルの指定した行インデックスに対応するシート内の行を取得します

【GetModelRowFromViewRow】メソッド
シートの指定した行インデックスに対応するデータモデル内の行を取得します

◎サンプルコード
  Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
    FpSpread1.ActiveSheet.RowCount = 5
    FpSpread1.ActiveSheet.ColumnCount = 2
    Dim dModel As New FarPoint.Win.Spread.Model.DefaultSheetDataModel
    dModel = FpSpread1.ActiveSheet.Models.Data
    dModel.SetValue(0, 0, 10)
    dModel.SetValue(1, 0, 15)
    dModel.SetValue(2, 0, 1)
    dModel.SetValue(3, 0, 50)
    dModel.SetValue(4, 0, 5)
    FpSpread1.ActiveSheet.ColumnHeader.Columns(0, 0).AllowAutoSort = True

    Label1.Text = "データモデルの並び" + ControlChars.CrLf + _
           "10" + ControlChars.CrLf + _
           "15" + ControlChars.CrLf + _
           "1" + ControlChars.CrLf + _
           "50" + ControlChars.CrLf + _
           "5"
    FpSpread1.ActiveSheet.Columns(1).Resizable = False
    FpSpread1.ActiveSheet.Rows(1).Resizable = False
  End Sub

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    'モデルの指定した行インデックスに対応するシート内の行を取得します
    Dim i As Integer
    For i = 0 To FpSpread1.ActiveSheet.RowCount - 1
      Debug.WriteLine("モデル行" + i.ToString + "に対する行インデックス:" + FpSpread1.ActiveSheet.GetViewRowFromModelRow(i).ToString)
    Next
  End Sub

  Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    'シートの指定した行インデックスに対応するデータモデル内の行を取得します
    Dim i As Integer
    For i = 0 To FpSpread1.ActiveSheet.RowCount - 1
      Debug.WriteLine("行" + i.ToString + "に対するモデル行インデックス:" + FpSpread1.ActiveSheet.GetModelRowFromViewRow(i).ToString)
    Next
  End Sub
関連情報
キーワード
「ソート」