DataAllowAddNewプロパティをTrueにした場合、新規行上のマルチオプション型セルをクリックしても項目が選択されない

文書番号 : 37730     文書種別 : 不具合     登録日 : 2015/01/27     最終更新日 : 2015/07/23
文書を印刷する
対象製品
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
回避方法
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