AutoGenerateColumnsをFalseに設定した場合、DataSourceの変更した後に新規行の位置が適切に更新されない

文書番号 : 38351     文書種別 : 不具合     登録日 : 2015/04/24     最終更新日 : 2015/07/23
文書を印刷する
対象製品
SPREAD for Windows Forms 7.0J
状況
修正済み
詳細
AutoGenerateColumnsをFalseに設定した場合、DataSourceの変更した後に新規行の位置が適切に更新さません(新規行が最終行に表示されない場合があります)。

【手順】
1.新規フォームにSPREADとButtonを配置します
2.下記サンプルコードをコピーし、アプリケーションを実行します
3.Buttonをクリックします
  --新規行が最終行に表示されません

【サンプルコード】
  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(String))
    For i As Integer = 0 To 2
      dt.Rows.Add(String.Format("A{0}", i), String.Format("B{0}", i))
    Next
    dt.AcceptChanges()

    ' SPREADの設定
    FpSpread1.ActiveSheet.DataAllowAddNew = True
    FpSpread1.ActiveSheet.AutoGenerateColumns = False
    FpSpread1.ActiveSheet.Columns(0).DataField = "ColumnA"
    FpSpread1.ActiveSheet.Columns(1).DataField = "ColumnB"
    FpSpread1.DataSource = dt
  End Sub

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    ' データの作成
    Dim dt As New DataTable("TEST")
    dt.Columns.Add("ColumnA", GetType(String))
    dt.Columns.Add("ColumnB", GetType(String))
    For i As Integer = 0 To 4
      dt.Rows.Add(String.Format("C{0}", i), String.Format("D{0}", i))
    Next
    dt.AcceptChanges()
    FpSpread1.DataSource = dt
  End Sub
回避方法
Service Pack 5(v7.0.2018.2008)で修正済み。
Service Pack 5(v7.0.2018.2008)より前のバージョンでは次の回避方法が有効です。
------------------------------------------

以下のサンプルコードのようにDataSourceの変更前に新規行の位置をリセットします。

【サンプルコード】
  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    ' データの作成
    Dim dt As New DataTable("TEST")
    dt.Columns.Add("ColumnA", GetType(String))
    dt.Columns.Add("ColumnB", GetType(String))
    For i As Integer = 0 To 4
      dt.Rows.Add(String.Format("C{0}", i), String.Format("D{0}", i))
    Next
    dt.AcceptChanges()

    ' 回避策
    Dim support As FarPoint.Win.Spread.Model.IUnboundRowAddNewRowSupport = FpSpread1.ActiveSheet.Models.Data
    If Not support Is Nothing Then
      support.UnBoundNewRowIndex = -1
    End If
    ' 回避策

    FpSpread1.DataSource = dt
  End Sub