AutoGenerateColumnsをFalseに設定した場合、DataSourceの変更した後に新規行の位置が適切に更新されない
対象製品
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
【手順】
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
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