作成日: 2019/04/24 最終更新日: 2021/05/26
文書種別
不具合
状況
修正済み
詳細
■事象
下記条件の場合に、フッタに設定した数式が再計算されません。
1. SPREADのDataSourceにBindingSourceを設定する。
2. BindingSourceのDataSourceに設定しているオブジェクトを入れ替える
3. データソース変更前後のデータの行数が同じ
■再現手順
1.新規作成したプロジェクトのFormにFpSpreadとbutton1を貼りつける。
2.下記のサンプルコードを記述する。
3.button1を押下する。
4.button1を再度押下する。
■サンプルコード(VB.NET)
下記条件の場合に、フッタに設定した数式が再計算されません。
1. SPREADのDataSourceにBindingSourceを設定する。
2. BindingSourceのDataSourceに設定しているオブジェクトを入れ替える
3. データソース変更前後のデータの行数が同じ
■再現手順
1.新規作成したプロジェクトのFormにFpSpreadとbutton1を貼りつける。
2.下記のサンプルコードを記述する。
3.button1を押下する。
4.button1を再度押下する。
■サンプルコード(VB.NET)
Private dt As DataTable
Private bs As New BindingSource()
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' 列フッタ上のセルに集計関数を設定します。
FpSpread1.ActiveSheet.ColumnFooter.Visible = True
FpSpread1.ActiveSheet.ColumnFooter.SetAggregationType(0, 0, FarPoint.Win.Spread.Model.AggregationType.Sum)
FpSpread1.ActiveSheet.ColumnFooter.SetAggregationType(0, 1, FarPoint.Win.Spread.Model.AggregationType.Sum)
' DataTableを生成し、SPREADに連結します。
dt = New DataTable
dt.Columns.Add("Field1", Type.GetType("System.Int32"))
dt.Columns.Add("Field2", Type.GetType("System.Int32"))
bs.DataSource = dt
FpSpread1.DataSource = bs
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' DataTableにレコードを追加します。
Dim rnd As New Random
dt = New DataTable
dt.Columns.Add("Field1", Type.GetType("System.Int32"))
dt.Columns.Add("Field2", Type.GetType("System.Int32"))
dt.Rows.Add(New Object() {1, rnd.Next(10000)})
dt.Rows.Add(New Object() {2, rnd.Next(10000)})
dt.Rows.Add(New Object() {3, rnd.Next(10000)})
bs.DataSource = dt
End Sub
Private bs As New BindingSource()
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' 列フッタ上のセルに集計関数を設定します。
FpSpread1.ActiveSheet.ColumnFooter.Visible = True
FpSpread1.ActiveSheet.ColumnFooter.SetAggregationType(0, 0, FarPoint.Win.Spread.Model.AggregationType.Sum)
FpSpread1.ActiveSheet.ColumnFooter.SetAggregationType(0, 1, FarPoint.Win.Spread.Model.AggregationType.Sum)
' DataTableを生成し、SPREADに連結します。
dt = New DataTable
dt.Columns.Add("Field1", Type.GetType("System.Int32"))
dt.Columns.Add("Field2", Type.GetType("System.Int32"))
bs.DataSource = dt
FpSpread1.DataSource = bs
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' DataTableにレコードを追加します。
Dim rnd As New Random
dt = New DataTable
dt.Columns.Add("Field1", Type.GetType("System.Int32"))
dt.Columns.Add("Field2", Type.GetType("System.Int32"))
dt.Rows.Add(New Object() {1, rnd.Next(10000)})
dt.Rows.Add(New Object() {2, rnd.Next(10000)})
dt.Rows.Add(New Object() {3, rnd.Next(10000)})
bs.DataSource = dt
End Sub
回避方法
Service Pack 4(v11.0.4505.2012)で修正済み。
Service Pack 4 を適用せずに対処する方法としては、DataSource変更後にSheetViewクラスのRecalculateAllメソッドを実行することで、数式が再計算されます。
旧文書番号
83916