作成日: 2019/07/10 最終更新日: 2021/05/26
文書種別
不具合
状況
修正済み
詳細
階層表示で子シートの行の追加と削除を繰り返すと例外(IndexOutOfRangeException)が発生します。
【再現手順】
1.新規作成したプロジェクトのFormにFpSpreadとButton1、Button2を配置します
2.下記のサンプルコードを記述し、プロジェクトをデバッグ実行します
2.親の行を選択してButton1を押下します
3.追加された子の行を選択して、Button2を押下します
4.手順2~3を繰り返します
-- 例外が発生します
■サンプルコード(VB.NET)
【再現手順】
1.新規作成したプロジェクトのFormにFpSpreadとButton1、Button2を配置します
2.下記のサンプルコードを記述し、プロジェクトをデバッグ実行します
2.親の行を選択してButton1を押下します
3.追加された子の行を選択して、Button2を押下します
4.手順2~3を繰り返します
-- 例外が発生します
■サンプルコード(VB.NET)
Public Class Form1
Private dsDetail As DataSet
Private tblParent As DataTable
Private tblChild As DataTable
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
dsDetail = New DataSet
'親データ
tblParent = New DataTable
tblParent.Columns.Add("key1", GetType(Integer))
tblParent.Columns.Add("分類", GetType(String))
tblParent.Rows.Add(New Object() {1, "parent1"})
tblParent.Rows.Add(New Object() {2, "parent2"})
'子データ
tblChild = New DataTable
tblChild.Columns.Add("key1", GetType(Integer))
tblChild.Columns.Add("child1", GetType(String))
tblChild.Columns.Add("child2", GetType(String))
tblChild.Columns.Add("child3", GetType(Integer))
tblChild.PrimaryKey = New DataColumn() {tblChild.Columns("key1")}
dsDetail.Tables.Add(tblParent)
dsDetail.Tables.Add(tblChild)
'リレーション設定
dsDetail.Relations.Add("relations", tblParent.Columns("key1"), tblChild.Columns("key1"))
FpSpread1.ActiveSheet.DataSource = dsDetail
'非表示設定
FpSpread1.ActiveSheet.Columns(0).Visible = False
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim keyVal As Integer = FpSpread1.ActiveSheet.GetValue(FpSpread1.ActiveSheet.ActiveRowIndex, 0)
'選択された親に子明細を追加
tblChild.Rows.Add(New Object() {keyVal, "", "", 0})
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
' 現象発生(1)
Dim svChild As FarPoint.Win.Spread.SheetView = FpSpread1.ActiveSheet.GetChildView(FpSpread1.ActiveSheet.ActiveRowIndex, 0)
'選択された子明細の削除
svChild.RemoveRows(svChild.ActiveRowIndex, 1)
End Sub
End Class
Private dsDetail As DataSet
Private tblParent As DataTable
Private tblChild As DataTable
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
dsDetail = New DataSet
'親データ
tblParent = New DataTable
tblParent.Columns.Add("key1", GetType(Integer))
tblParent.Columns.Add("分類", GetType(String))
tblParent.Rows.Add(New Object() {1, "parent1"})
tblParent.Rows.Add(New Object() {2, "parent2"})
'子データ
tblChild = New DataTable
tblChild.Columns.Add("key1", GetType(Integer))
tblChild.Columns.Add("child1", GetType(String))
tblChild.Columns.Add("child2", GetType(String))
tblChild.Columns.Add("child3", GetType(Integer))
tblChild.PrimaryKey = New DataColumn() {tblChild.Columns("key1")}
dsDetail.Tables.Add(tblParent)
dsDetail.Tables.Add(tblChild)
'リレーション設定
dsDetail.Relations.Add("relations", tblParent.Columns("key1"), tblChild.Columns("key1"))
FpSpread1.ActiveSheet.DataSource = dsDetail
'非表示設定
FpSpread1.ActiveSheet.Columns(0).Visible = False
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim keyVal As Integer = FpSpread1.ActiveSheet.GetValue(FpSpread1.ActiveSheet.ActiveRowIndex, 0)
'選択された親に子明細を追加
tblChild.Rows.Add(New Object() {keyVal, "", "", 0})
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
' 現象発生(1)
Dim svChild As FarPoint.Win.Spread.SheetView = FpSpread1.ActiveSheet.GetChildView(FpSpread1.ActiveSheet.ActiveRowIndex, 0)
'選択された子明細の削除
svChild.RemoveRows(svChild.ActiveRowIndex, 1)
End Sub
End Class
回避方法
Service Pack 4(v11.0.4505.2012)で修正済み。
旧文書番号
84228