作成日: 2020/02/06 最終更新日: 2020/04/30
文書種別
不具合
状況
修正済み
詳細
SetColumnMergeメソッドを使用して列のマージを有効にし、データの再連結を繰り返し行った場合に、以下の例外が発生する場合があります。
ArgumentOutOfRangeException: 行インデックスが無効です
【再現手順】
1.新規作成したプロジェクトのForm1にFpSpreadとButtonを貼り付ける。
2.下記サンプルコードを記述し、プロジェクトをデバック実行する。
3.実行画面でButton1を何度か押してデータの再連結を繰り返します。
-- 例外が発生します
■サンプルコード(VB.NET)
【要因】
データの変更が完了していない段階でSPREADがレイアウトを更新しようとしていることに起因しています。
ArgumentOutOfRangeException: 行インデックスが無効です
【再現手順】
1.新規作成したプロジェクトのForm1にFpSpreadとButtonを貼り付ける。
2.下記サンプルコードを記述し、プロジェクトをデバック実行する。
3.実行画面でButton1を何度か押してデータの再連結を繰り返します。
-- 例外が発生します
■サンプルコード(VB.NET)
Public Class Form1
Private customData As New List(Of CustomItem)()
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' データの連結
Button1.PerformClick()
FpSpread1.Height = 300
FpSpread1.Width = 500
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' データのクリア
FpSpread1.ActiveSheet.DataSource = Nothing
customData.Clear()
' データの作成と連結
Dim num As Integer = New Random().Next(2, 20)
Dim count As Integer = New Random().Next(50, 100)
Me.Text = $"{num}"
For i = 0 To count
customData.Add(New CustomItem() With {.Code = i ¥ num, .Name = $"B{i}"})
Next
FpSpread1.ActiveSheet.DataSource = customData
' 列のマージ
FpSpread1.ActiveSheet.SetColumnMerge(-1, FarPoint.Win.Spread.Model.MergePolicy.Restricted)
' 末尾のセルを選択
FpSpread1.ActiveSheet.SetActiveCell(FpSpread1.ActiveSheet.RowCount - 1, 0)
FpSpread1.ShowActiveCell(FarPoint.Win.Spread.VerticalPosition.Nearest, FarPoint.Win.Spread.HorizontalPosition.Nearest)
End Sub
End Class
Public Class CustomItem
Public Property Code As Integer
Public Property Name As String
End Class
Private customData As New List(Of CustomItem)()
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' データの連結
Button1.PerformClick()
FpSpread1.Height = 300
FpSpread1.Width = 500
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' データのクリア
FpSpread1.ActiveSheet.DataSource = Nothing
customData.Clear()
' データの作成と連結
Dim num As Integer = New Random().Next(2, 20)
Dim count As Integer = New Random().Next(50, 100)
Me.Text = $"{num}"
For i = 0 To count
customData.Add(New CustomItem() With {.Code = i ¥ num, .Name = $"B{i}"})
Next
FpSpread1.ActiveSheet.DataSource = customData
' 列のマージ
FpSpread1.ActiveSheet.SetColumnMerge(-1, FarPoint.Win.Spread.Model.MergePolicy.Restricted)
' 末尾のセルを選択
FpSpread1.ActiveSheet.SetActiveCell(FpSpread1.ActiveSheet.RowCount - 1, 0)
FpSpread1.ShowActiveCell(FarPoint.Win.Spread.VerticalPosition.Nearest, FarPoint.Win.Spread.HorizontalPosition.Nearest)
End Sub
End Class
Public Class CustomItem
Public Property Code As Integer
Public Property Name As String
End Class
【要因】
データの変更が完了していない段階でSPREADがレイアウトを更新しようとしていることに起因しています。
回避方法
Service Pack 4(v12.0.4505.2012)で修正済み。
Service Pack を適用せずに対処する場合、データの再連結を行う前にマージの設定をオフにします。
■サンプルコード(VB.NET)
Service Pack を適用せずに対処する場合、データの再連結を行う前にマージの設定をオフにします。
■サンプルコード(VB.NET)
Public Class Form1
Private customData As New List(Of CustomItem)()
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' データの連結
Button1.PerformClick()
FpSpread1.Height = 300
FpSpread1.Width = 500
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' データのクリア
FpSpread1.ActiveSheet.DataSource = Nothing
customData.Clear()
' データの作成と連結
Dim num As Integer = New Random().Next(2, 20)
Dim count As Integer = New Random().Next(50, 100)
Me.Text = $"{num}"
For i = 0 To count
customData.Add(New CustomItem() With {.Code = i ¥ num, .Name = $"B{i}"})
Next
'MergePolicyを一旦Noneにする
FpSpread1.ActiveSheet.SetColumnMerge(-1, FarPoint.Win.Spread.Model.MergePolicy.None)
FpSpread1.ActiveSheet.DataSource = customData
' 列のマージ
FpSpread1.ActiveSheet.SetColumnMerge(-1, FarPoint.Win.Spread.Model.MergePolicy.Restricted)
' 末尾のセルを選択
FpSpread1.ActiveSheet.SetActiveCell(FpSpread1.ActiveSheet.RowCount - 1, 0)
FpSpread1.ShowActiveCell(FarPoint.Win.Spread.VerticalPosition.Nearest, FarPoint.Win.Spread.HorizontalPosition.Nearest)
End Sub
End Class
Public Class CustomItem
Public Property Code As Integer
Public Property Name As String
End Class
Private customData As New List(Of CustomItem)()
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' データの連結
Button1.PerformClick()
FpSpread1.Height = 300
FpSpread1.Width = 500
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' データのクリア
FpSpread1.ActiveSheet.DataSource = Nothing
customData.Clear()
' データの作成と連結
Dim num As Integer = New Random().Next(2, 20)
Dim count As Integer = New Random().Next(50, 100)
Me.Text = $"{num}"
For i = 0 To count
customData.Add(New CustomItem() With {.Code = i ¥ num, .Name = $"B{i}"})
Next
'MergePolicyを一旦Noneにする
FpSpread1.ActiveSheet.SetColumnMerge(-1, FarPoint.Win.Spread.Model.MergePolicy.None)
FpSpread1.ActiveSheet.DataSource = customData
' 列のマージ
FpSpread1.ActiveSheet.SetColumnMerge(-1, FarPoint.Win.Spread.Model.MergePolicy.Restricted)
' 末尾のセルを選択
FpSpread1.ActiveSheet.SetActiveCell(FpSpread1.ActiveSheet.RowCount - 1, 0)
FpSpread1.ShowActiveCell(FarPoint.Win.Spread.VerticalPosition.Nearest, FarPoint.Win.Spread.HorizontalPosition.Nearest)
End Sub
End Class
Public Class CustomItem
Public Property Code As Integer
Public Property Name As String
End Class
旧文書番号
84917