作成日: 2019/11/27 最終更新日: 2019/12/20
文書種別
不具合
状況
修正済み
詳細
SPREAD上でソートを実行した状態で、表示されている行数より多いデータのデータソースと再連結を行うと、例外(IndexOutOfRangeException)が発生します。
再現手順
1.新規作成したプロジェクトのFormにFpSpread、Buttonを貼り付けます。
2.下記のサンプルコードを記述しプロジェクトをデバッグ実行します。
3.A列をソートし、Button1を押下します。
■サンプルコード(VB.NET)
再現手順
1.新規作成したプロジェクトのFormにFpSpread、Buttonを貼り付けます。
2.下記のサンプルコードを記述しプロジェクトをデバッグ実行します。
3.A列をソートし、Button1を押下します。
■サンプルコード(VB.NET)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
setData(3)
FpSpread1.ActiveSheet.SetColumnAllowAutoSort(0, True)
End Sub
Private Sub setData(rowCount As Integer)
' データ作成
Dim dt As New DataTable("Test")
dt.Columns.Add("ColA", GetType(String))
dt.Columns.Add("ColB", GetType(String))
For i As Integer = 0 To rowCount
dt.Rows.Add(String.Format("A{0}", rowCount), String.Format("B{0}", i))
Next
dt.AcceptChanges()
FpSpread1.ActiveSheet.DataSource = dt
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
setData(5)
End Sub
setData(3)
FpSpread1.ActiveSheet.SetColumnAllowAutoSort(0, True)
End Sub
Private Sub setData(rowCount As Integer)
' データ作成
Dim dt As New DataTable("Test")
dt.Columns.Add("ColA", GetType(String))
dt.Columns.Add("ColB", GetType(String))
For i As Integer = 0 To rowCount
dt.Rows.Add(String.Format("A{0}", rowCount), String.Format("B{0}", i))
Next
dt.AcceptChanges()
FpSpread1.ActiveSheet.DataSource = dt
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
setData(5)
End Sub
回避方法
Service Pack 3(v12.0.4504.2012 )で修正済み。
Service Pack を適用せずに対処する方法としては、データの再連結を行う前に、連結するデータの行数をシートの行数として設定することで例外を回避可能です。
■サンプルコード(VB.NET)
Service Pack を適用せずに対処する方法としては、データの再連結を行う前に、連結するデータの行数をシートの行数として設定することで例外を回避可能です。
■サンプルコード(VB.NET)
Private Sub setData(rowCount As Integer)
' データ作成
Dim dt As New DataTable("Test")
dt.Columns.Add("ColA", GetType(String))
dt.Columns.Add("ColB", GetType(String))
For i As Integer = 0 To rowCount
dt.Rows.Add(String.Format("A{0}", rowCount), String.Format("B{0}", i))
Next
dt.AcceptChanges()
' 回避策
FpSpread1.ActiveSheet.RowCount = dt.Rows.Count
FpSpread1.ActiveSheet.DataSource = dt
End Sub
' データ作成
Dim dt As New DataTable("Test")
dt.Columns.Add("ColA", GetType(String))
dt.Columns.Add("ColB", GetType(String))
For i As Integer = 0 To rowCount
dt.Rows.Add(String.Format("A{0}", rowCount), String.Format("B{0}", i))
Next
dt.AcceptChanges()
' 回避策
FpSpread1.ActiveSheet.RowCount = dt.Rows.Count
FpSpread1.ActiveSheet.DataSource = dt
End Sub
旧文書番号
84674