作成日: 2020/02/28 最終更新日: 2020/04/30
文書種別
不具合
状況
修正済み
詳細
文字列型データのDataColumnを連結した列に数値型セルを設定すると、セルの編集を開始し値を変更せずに終了した場合であってもDefaultSheetDataModelのChangeイベントが発生します。
【再現手順】
1.新規作成したプロジェクトのForm1にFpSpreadを貼り付ける。
2.下記サンプルコードを記述しデバック実行する。
3.実行画面にて(ColA,1)セルの編集を開始する。
4.値を変更せずにTabキー等でセルを移動する。
---Changeイベントが発生してコンソールへその内容が出力される
■サンプルコード(VB.NET)
【再現手順】
1.新規作成したプロジェクトのForm1にFpSpreadを貼り付ける。
2.下記サンプルコードを記述しデバック実行する。
3.実行画面にて(ColA,1)セルの編集を開始する。
4.値を変更せずにTabキー等でセルを移動する。
---Changeイベントが発生してコンソールへその内容が出力される
■サンプルコード(VB.NET)
Imports FarPoint.Win.Spread.Model
Public Class Form1
Private WithEvents dm As FarPoint.Win.Spread.Model.DefaultSheetDataModel
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
AddHandler FpSpread1.ActiveSheet.Models.Data.Changed, AddressOf dm_Changed
' SPREAD用データテーブルの作成
Dim dt As New DataTable("Test")
dt.Columns.Add("ColA") ' <== 原因:既定値はString型です
dt.Columns.Add("ColB", GetType(Double))
dt.Columns.Add("ColC", GetType(String))
dt.Rows.Add(0, 0, "")
dt.Rows.Add("0", 0, "")
dt.AcceptChanges()
' データ連結
FpSpread1.ActiveSheet.DataAutoCellTypes = False
FpSpread1.ActiveSheet.DataAutoSizeColumns = False
FpSpread1.ActiveSheet.DataSource = dt
FpSpread1.ActiveSheet.Columns(0, 1).CellType = New FarPoint.Win.Spread.CellType.NumberCellType()
End Sub
Private Sub dm_Changed(sender As Object, e As SheetDataModelEventArgs) Handles dm.Changed
Console.WriteLine($"dm_Changed: row={e.Row} col={e.Column} Type = {e.Type}")
End Sub
End Class
Public Class Form1
Private WithEvents dm As FarPoint.Win.Spread.Model.DefaultSheetDataModel
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
AddHandler FpSpread1.ActiveSheet.Models.Data.Changed, AddressOf dm_Changed
' SPREAD用データテーブルの作成
Dim dt As New DataTable("Test")
dt.Columns.Add("ColA") ' <== 原因:既定値はString型です
dt.Columns.Add("ColB", GetType(Double))
dt.Columns.Add("ColC", GetType(String))
dt.Rows.Add(0, 0, "")
dt.Rows.Add("0", 0, "")
dt.AcceptChanges()
' データ連結
FpSpread1.ActiveSheet.DataAutoCellTypes = False
FpSpread1.ActiveSheet.DataAutoSizeColumns = False
FpSpread1.ActiveSheet.DataSource = dt
FpSpread1.ActiveSheet.Columns(0, 1).CellType = New FarPoint.Win.Spread.CellType.NumberCellType()
End Sub
Private Sub dm_Changed(sender As Object, e As SheetDataModelEventArgs) Handles dm.Changed
Console.WriteLine($"dm_Changed: row={e.Row} col={e.Column} Type = {e.Type}")
End Sub
End Class
回避方法
Service Pack 4(v12.0.4505.2012)で修正済み。
Service Pack を適用せずに対処する場合、データセットの型を文字列型ではなく、Double型データのDataColumnを使用することで回避が可能です。
■サンプルコード(VB.NET)
Service Pack を適用せずに対処する場合、データセットの型を文字列型ではなく、Double型データのDataColumnを使用することで回避が可能です。
■サンプルコード(VB.NET)
Imports FarPoint.Win.Spread.Model
Public Class Form1
Private WithEvents dm As FarPoint.Win.Spread.Model.DefaultSheetDataModel
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
AddHandler FpSpread1.ActiveSheet.Models.Data.Changed, AddressOf dm_Changed
' SPREAD用データテーブルの作成
Dim dt As New DataTable("Test")
dt.Columns.Add("ColA", GetType(Double))' 回避策
dt.Columns.Add("ColB", GetType(Double))
dt.Columns.Add("ColC", GetType(String))
dt.Rows.Add(0, 0, "")
dt.Rows.Add("0", 0, "")
dt.AcceptChanges()
' データ連結
FpSpread1.ActiveSheet.DataAutoCellTypes = False
FpSpread1.ActiveSheet.DataAutoSizeColumns = False
FpSpread1.ActiveSheet.DataSource = dt
FpSpread1.ActiveSheet.Columns(0, 1).CellType = New FarPoint.Win.Spread.CellType.NumberCellType()
End Sub
Private Sub dm_Changed(sender As Object, e As SheetDataModelEventArgs) Handles dm.Changed
Console.WriteLine($"dm_Changed: row={e.Row} col={e.Column} Type = {e.Type}")
End Sub
End Class
Public Class Form1
Private WithEvents dm As FarPoint.Win.Spread.Model.DefaultSheetDataModel
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
AddHandler FpSpread1.ActiveSheet.Models.Data.Changed, AddressOf dm_Changed
' SPREAD用データテーブルの作成
Dim dt As New DataTable("Test")
dt.Columns.Add("ColA", GetType(Double))' 回避策
dt.Columns.Add("ColB", GetType(Double))
dt.Columns.Add("ColC", GetType(String))
dt.Rows.Add(0, 0, "")
dt.Rows.Add("0", 0, "")
dt.AcceptChanges()
' データ連結
FpSpread1.ActiveSheet.DataAutoCellTypes = False
FpSpread1.ActiveSheet.DataAutoSizeColumns = False
FpSpread1.ActiveSheet.DataSource = dt
FpSpread1.ActiveSheet.Columns(0, 1).CellType = New FarPoint.Win.Spread.CellType.NumberCellType()
End Sub
Private Sub dm_Changed(sender As Object, e As SheetDataModelEventArgs) Handles dm.Changed
Console.WriteLine($"dm_Changed: row={e.Row} col={e.Column} Type = {e.Type}")
End Sub
End Class
旧文書番号
84967