DataAllowAddNewプロパティをTrueにした場合、新規行上のマルチオプション型セルをクリックしても項目が選択されない
対象製品
SPREAD for Windows Forms 7.0J
発生環境
Version 7.0.2014.2008(SP3)と7.0.2016.2008(SP4)で発生し、Version 7.0.2010.2008(SP2)では発生しません。
状況
修正済み
詳細
DataAllowAddNewプロパティをTrueにした場合、新規行上のマルチオプション型セルの初回クリック時に項目が選択されません。
【手順】
1.新規フォームにSPREADを配置します
2.下記サンプルコードをコピーし、アプリケーションを実行します
3.B1セルの項目Aをクリックします
--項目Aが選択されません
【サンプルコード】
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' データの作成
Dim dt As New DataTable("TEST")
dt.Columns.Add("ColumnA", GetType([String]))
dt.Columns.Add("ColumnB", GetType(Int32))
dt.Columns.Add("ColumnC", GetType([Boolean]))
dt.AcceptChanges()
' セル型の設定
Dim optionCell As New FarPoint.Win.Spread.CellType.MultiOptionCellType()
optionCell.Items = New String() {"A", "B"}
optionCell.Orientation = FarPoint.Win.RadioOrientation.Horizontal
FpSpread1.ActiveSheet.Columns(1).CellType = optionCell
Dim checkCell As New FarPoint.Win.Spread.CellType.CheckBoxCellType()
FpSpread1.ActiveSheet.Columns(2).CellType = checkCell
' SPREADの設定
FpSpread1.ActiveSheet.DataAutoCellTypes = False
FpSpread1.ActiveSheet.DataAutoSizeColumns = False
FpSpread1.ActiveSheet.DataSource = dt
FpSpread1.ActiveSheet.DataAllowAddNew = True
End Sub
【手順】
1.新規フォームにSPREADを配置します
2.下記サンプルコードをコピーし、アプリケーションを実行します
3.B1セルの項目Aをクリックします
--項目Aが選択されません
【サンプルコード】
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' データの作成
Dim dt As New DataTable("TEST")
dt.Columns.Add("ColumnA", GetType([String]))
dt.Columns.Add("ColumnB", GetType(Int32))
dt.Columns.Add("ColumnC", GetType([Boolean]))
dt.AcceptChanges()
' セル型の設定
Dim optionCell As New FarPoint.Win.Spread.CellType.MultiOptionCellType()
optionCell.Items = New String() {"A", "B"}
optionCell.Orientation = FarPoint.Win.RadioOrientation.Horizontal
FpSpread1.ActiveSheet.Columns(1).CellType = optionCell
Dim checkCell As New FarPoint.Win.Spread.CellType.CheckBoxCellType()
FpSpread1.ActiveSheet.Columns(2).CellType = checkCell
' SPREADの設定
FpSpread1.ActiveSheet.DataAutoCellTypes = False
FpSpread1.ActiveSheet.DataAutoSizeColumns = False
FpSpread1.ActiveSheet.DataSource = dt
FpSpread1.ActiveSheet.DataAllowAddNew = True
End Sub
回避方法
Service Pack 5(v7.0.2018.2008)で修正済み。
Service Pack 5(v7.0.2018.2008)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
以下のサンプルコードのように独自のセル型を使用します。
【サンプルコード】
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' データの作成
Dim dt As New DataTable("TEST")
dt.Columns.Add("ColumnA", GetType([String]))
dt.Columns.Add("ColumnB", GetType(Int32))
dt.Columns.Add("ColumnC", GetType([Boolean]))
dt.AcceptChanges()
' セル型の設定
'Dim optionCell As New FarPoint.Win.Spread.CellType.MultiOptionCellType()
Dim optionCell As New CustomMultiOptionCellType()
optionCell.Items = New String() {"A", "B"}
optionCell.Orientation = FarPoint.Win.RadioOrientation.Horizontal
FpSpread1.ActiveSheet.Columns(1).CellType = optionCell
Dim checkCell As New FarPoint.Win.Spread.CellType.CheckBoxCellType()
FpSpread1.ActiveSheet.Columns(2).CellType = checkCell
' SPREADの設定
FpSpread1.ActiveSheet.DataAutoCellTypes = False
FpSpread1.ActiveSheet.DataAutoSizeColumns = False
FpSpread1.ActiveSheet.DataSource = dt
FpSpread1.ActiveSheet.DataAllowAddNew = True
End Sub
<Serializable()> Public Class CustomMultiOptionCellType
Inherits FarPoint.Win.Spread.CellType.MultiOptionCellType
Public Sub New()
MyBase.New()
End Sub
Private inFireEditorValueChanged As Boolean = False
Protected Overrides Sub FireEditorValueChanged(ByVal e As EventArgs)
If inFireEditorValueChanged Then
Return
End If
inFireEditorValueChanged = True
Dim oldValue As Object = MyBase.GetEditorValue()
MyBase.FireEditorValueChanged(e)
If MyBase.GetEditorValue() <> oldValue Then
MyBase.SetEditorValue(oldValue)
End If
inFireEditorValueChanged = False
End Sub
End Class
Service Pack 5(v7.0.2018.2008)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
以下のサンプルコードのように独自のセル型を使用します。
【サンプルコード】
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' データの作成
Dim dt As New DataTable("TEST")
dt.Columns.Add("ColumnA", GetType([String]))
dt.Columns.Add("ColumnB", GetType(Int32))
dt.Columns.Add("ColumnC", GetType([Boolean]))
dt.AcceptChanges()
' セル型の設定
'Dim optionCell As New FarPoint.Win.Spread.CellType.MultiOptionCellType()
Dim optionCell As New CustomMultiOptionCellType()
optionCell.Items = New String() {"A", "B"}
optionCell.Orientation = FarPoint.Win.RadioOrientation.Horizontal
FpSpread1.ActiveSheet.Columns(1).CellType = optionCell
Dim checkCell As New FarPoint.Win.Spread.CellType.CheckBoxCellType()
FpSpread1.ActiveSheet.Columns(2).CellType = checkCell
' SPREADの設定
FpSpread1.ActiveSheet.DataAutoCellTypes = False
FpSpread1.ActiveSheet.DataAutoSizeColumns = False
FpSpread1.ActiveSheet.DataSource = dt
FpSpread1.ActiveSheet.DataAllowAddNew = True
End Sub
<Serializable()> Public Class CustomMultiOptionCellType
Inherits FarPoint.Win.Spread.CellType.MultiOptionCellType
Public Sub New()
MyBase.New()
End Sub
Private inFireEditorValueChanged As Boolean = False
Protected Overrides Sub FireEditorValueChanged(ByVal e As EventArgs)
If inFireEditorValueChanged Then
Return
End If
inFireEditorValueChanged = True
Dim oldValue As Object = MyBase.GetEditorValue()
MyBase.FireEditorValueChanged(e)
If MyBase.GetEditorValue() <> oldValue Then
MyBase.SetEditorValue(oldValue)
End If
inFireEditorValueChanged = False
End Sub
End Class