列ソートを行ってもデータモデルの並び順が変更されません(ソートした並びでExcelファイルにエクスポートされません)
対象製品
SPREAD for Windows Forms 7.0J
詳細
例えば列のAllowAutoSortプロパティをTrueにした場合の自動列ソートを行った際、並べ替えが行われるのはデータの表示のみでありデータモデルが影響を受けることはありません。また、Excelファイルにエクスポートされるデータはデータモデルの並びとなるため、必ずしも画面上の並び順で出力されません。このような場合は以下のメソッド呼び出しにより対応します。(いずれもSheetViewクラスメンバ)
【SortRange】メソッド
データモデル内のセル範囲を並べ替えます。データモデル内のセル範囲を並べ替えたい場合には本メソッド呼び出しを行います。
◎サンプルコード
また、「表示データ」と「実データ」を相互参照することも出来ます。
【GetViewRowFromModelRow】メソッド
モデルの指定した行インデックスに対応するシート内の行を取得します
【GetModelRowFromViewRow】メソッド
シートの指定した行インデックスに対応するデータモデル内の行を取得します
◎サンプルコード
【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
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
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
関連情報
- 行連結した列ヘッダにソートインジケーターが表示されません。また、ソートインジケーターの表示/非表示を制御することは出来ますか?
- 結合セルが含まれるスプレッドシートでは並べ替えを実行できませんが、対応方法はありますか?
- 独自のソートロジックで行を並び替えたい
- 自動ソート実行時に複数のソート条件を指定する方法
- 複数のソート条件を指定することは出来ますか?
キーワード
「ソート」