作成日: 2022/01/21 最終更新日: 2022/02/24
文書種別
技術情報
詳細
DataSourceプロパティを設定してデータ連結を行っている場合、セル参照を含む式は「SPREADの表面上の並び順」ではなく、「データのレコード順」に基づいて計算されます。
DataTableなどのDataSourceでは、データの並び順はDataSource側で管理しています。そのため、この並び順をSPREAD上のドラッグ&ドロップ等で行移動することにより変更することはできません。ドラッグ&ドロップ等による行移動はSPREADの表面上の並び順のみを変更していることとなり、レコード順に変化がない為、再計算が行われても計算結果が変わりません。
【再現手順】
1.新規作成したプロジェクトのForm1にFpSpreadを配置し、下記のサンプルコードを記述する
2.プロジェクトをデバック実行する
3.実行画面にて行をドラッグ&ドロップで表示順を変更する
-------計算結果は変わらない(SPREADの表示順ではなくデータのレコード順で計算しているため)
■サンプルコード(VB.NET)
DataTableなどのDataSourceでは、データの並び順はDataSource側で管理しています。そのため、この並び順をSPREAD上のドラッグ&ドロップ等で行移動することにより変更することはできません。ドラッグ&ドロップ等による行移動はSPREADの表面上の並び順のみを変更していることとなり、レコード順に変化がない為、再計算が行われても計算結果が変わりません。
【再現手順】
1.新規作成したプロジェクトのForm1にFpSpreadを配置し、下記のサンプルコードを記述する
2.プロジェクトをデバック実行する
3.実行画面にて行をドラッグ&ドロップで表示順を変更する
-------計算結果は変わらない(SPREADの表示順ではなくデータのレコード順で計算しているため)
■サンプルコード(VB.NET)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' 初期設定
FpSpread1.AllowRowMove = True
FpSpread1.AllowRowMoveMultiple = True
FpSpread1.ActiveSheet.ReferenceStyle = FarPoint.Win.Spread.Model.ReferenceStyle.R1C1
' データ連結によるデータ設定:行の移動に対応できない
Call Test1()
' 数式の設定
FpSpread1.ActiveSheet.Columns(1).Formula = "IFERROR(R[0]C[-1]+R[-1]C[-1],"""")"
End Sub
Private Sub Test1()
' データの作成
Dim dt As New DataTable("Test")
dt.Columns.Add("ColA", GetType(Int32))
For i = 0 To 4
dt.Rows.Add(i + 1)
Next
dt.AcceptChanges()
' データ連結
FpSpread1.ActiveSheet.AutoGenerateColumns = False
FpSpread1.ActiveSheet.Columns(0).DataField = "ColA"
FpSpread1.ActiveSheet.DataSource = dt
End Sub
' 初期設定
FpSpread1.AllowRowMove = True
FpSpread1.AllowRowMoveMultiple = True
FpSpread1.ActiveSheet.ReferenceStyle = FarPoint.Win.Spread.Model.ReferenceStyle.R1C1
' データ連結によるデータ設定:行の移動に対応できない
Call Test1()
' 数式の設定
FpSpread1.ActiveSheet.Columns(1).Formula = "IFERROR(R[0]C[-1]+R[-1]C[-1],"""")"
End Sub
Private Sub Test1()
' データの作成
Dim dt As New DataTable("Test")
dt.Columns.Add("ColA", GetType(Int32))
For i = 0 To 4
dt.Rows.Add(i + 1)
Next
dt.AcceptChanges()
' データ連結
FpSpread1.ActiveSheet.AutoGenerateColumns = False
FpSpread1.ActiveSheet.Columns(0).DataField = "ColA"
FpSpread1.ActiveSheet.DataSource = dt
End Sub